-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGoogleSheetWorker.cs
167 lines (121 loc) · 5.5 KB
/
GoogleSheetWorker.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
namespace MigrationBot
{
internal class GoogleSheetWorker
{
private static readonly string[] Scopes = { SheetsService.Scope.Spreadsheets };
private static readonly string ApplicationName = "baumanbot";
private static readonly string SpreadSheetId = Data.Strings.Tokens.GoogleToken;
public SheetsService service;
public GoogleCredential credential;
public GoogleSheetWorker()
{
using (var stream = new FileStream("secrets.json", FileMode.Open, FileAccess.Read))
{
this.credential = GoogleCredential.FromStream(stream).CreateScoped(Scopes);
}
this.service = new SheetsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName
});
}
public async Task UpdateEntries(DateOnly date)
{
await CleanSheet(date);
string curr_date = $"0{date.Day}.0{date.Month}";
if (date.Month >= 10 && date.Day >= 10)
curr_date = $"{date.Day}.{date.Month}";
if (date.Month >= 10 && !(date.Day >= 10))
curr_date = $"0{date.Day}.{date.Month}";
if (!(date.Month >= 10) && date.Day >= 10)
curr_date = $"{date.Day}.0{date.Month}";
var range = $"{curr_date}.{date.Year}!A:G";
var valueRange = new ValueRange();
var user_entries = MyEntry.GetEntriesByDate(date);
List<object> header = new List<object> { "id", "ФИО (ru)", "ФИО (en)", "Дата прибытия", "Страна", "Услуга", "Время записи" };
IList<IList<object>> values = new List<IList<object>>
{
header
};
foreach (var entry in user_entries)
{
var user = await MyUser.GetUser(entry.UserId);
string country = Enums.Countries_byId[(int)user.Country];
if (user.CountrStr != null)
country = user.CountrStr;
List<object> objectList = new List<object>()
{
user.ChatId,user.FioRu,
user.FioEn,
user.ArrivalDate,
country,
Enums.Services_byId[(int)user.Service],
user.Entry.Value.TimeOfDay.ToString()
};
values.Add(objectList);
}
valueRange.Values = values;
var update = service.Spreadsheets.Values.Update(valueRange, SpreadSheetId, range);
update.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;
await update.ExecuteAsync();
}
public async Task CleanSheet(DateOnly date)
{
string curr_date = $"0{date.Day}.0{date.Month}";
if (date.Month >= 10 && date.Day >= 10)
curr_date = $"{date.Day}.{date.Month}";
if (date.Month >= 10 && !(date.Day >= 10))
curr_date = $"0{date.Day}.{date.Month}";
if (!(date.Month >= 10) && date.Day >= 10)
curr_date = $"{date.Day}.0{date.Month}";
var range = $"{curr_date}.{date.Year}!A:G";
var valueRange = new ValueRange();
ClearValuesRequest request_body = new ClearValuesRequest();
var appendRequest = service.Spreadsheets.Values.Clear(request_body, SpreadSheetId, range);
await appendRequest.ExecuteAsync();
}
public async Task AddSheet(string _sheetName)
{
// Добавить новый лист
var addSheetRequest = new AddSheetRequest();
addSheetRequest.Properties = new SheetProperties();
addSheetRequest.Properties.Title = _sheetName;
BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
batchUpdateSpreadsheetRequest.Requests = new List<Request>
{
new Request
{
AddSheet = addSheetRequest
}
};
// Создать запрос
var batchUpdateRequest =
service.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, SpreadSheetId);
// Выполнить запрос
var response = await batchUpdateRequest.ExecuteAsync();
}
public async Task DropSheet()
{
var request = service.Spreadsheets.Get(SpreadSheetId);
var resp = await request.ExecuteAsync();
foreach (var sheet in resp.Sheets)
{
var delete_sheet = new DeleteSheetRequest();
delete_sheet.SheetId = sheet.Properties.SheetId;
BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
batchUpdateSpreadsheetRequest.Requests = new List<Request>
{
new Request
{
DeleteSheet = delete_sheet
}
};
var batchUpdateRequest =
service.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, SpreadSheetId);
if (sheet.Properties.Title != "Не удаляй меня")
await batchUpdateRequest.ExecuteAsync();
}
}
}
}