Skip to content

Instantly share code, notes, and snippets.

@kir-sf
Created November 1, 2016 16:15
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kir-sf/c0fa4fbc9fcdc38386b967422fe36812 to your computer and use it in GitHub Desktop.
Save kir-sf/c0fa4fbc9fcdc38386b967422fe36812 to your computer and use it in GitHub Desktop.
Распределенная касса
var ID='вставьте сюда ID своей таблицы с единым реестром операций';
function doGet(e) {
try {
var indexOfTochka=e.parameter.table;
if (indexOfTochka!=undefined) uploadTable(indexOfTochka);
} catch (err) {return err};
return 0;
}
function uploadTable(par) {
// определяем точку
var tochkaName=getName(par);
if (tochkaName==0) return 0;
// читаем данные
var source=SpreadsheetApp.openById(par).getSheetByName('Реестр');
var numRows=source.getDataRange().getNumRows();
var data=source.getRange(9, 1, numRows-8, 4).getValues();
var dateOfReport=source.getRange(5, 2).getValue();
// заливаем в журнал
var dest=SpreadsheetApp.openById(ID).getSheetByName('Реестр операций');
for (var index=0; index<data.length; index++) {
var newRow=[dateOfReport, tochkaName, data[index][0], data[index][1], data[index][2], data[index][3]];
dest.appendRow(newRow);
}
// устанавливаем следующий день
nextDay(par);
}
// триггер установки нового дня
function setNewDay() {
var toDay=new Date();
if (toDay.getDate()==1)
makeArchive();
}
// перещелкиваем день в таблице
function nextDay(id) {
var sh=SpreadsheetApp.openById(id).getSheetByName('Реестр');
var curDate=new Date(sh.getRange(5, 2).getValue());
var newDate=new Date(curDate.getFullYear(), curDate.getMonth(), curDate.getDate()+1);
sh.getRange(5, 2).setValue(newDate);
sh.getRange(2, 2).setValue(sh.getRange(3, 2).getValue()); // остаток на утро переставляем
var numRows=sh.getDataRange().getNumRows();
if (numRows>8) sh.getRange(9, 1, numRows-8, 4).clear();
}
// определение наименования точки по переданному параметру
function getName(par) {
var sh=SpreadsheetApp.openById(ID).getSheetByName('Реестр точек');
var numCols=sh.getDataRange().getNumColumns();
var tochkiIds=sh.getRange(2, 1, 1, numCols).getValues();
var curTochkaIndex=tochkiIds[0].indexOf(par);
if (curTochkaIndex==-1) return 0;
var tochkaName=sh.getRange(1, curTochkaIndex+1).getValue();
return tochkaName;
}
// отправка архива
function makeArchive () {
var toDay=new Date();
var file=Drive.Files.get(ID);
var url=file.exportLinks['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
var token = ScriptApp.getOAuthToken();
var response = UrlFetchApp.fetch(url, {
headers: {
'Authorization': 'Bearer ' + token
}
});
var fileToSend=response.getBlob().setName("Архив журнала операций от "+toDay);
var mail={
htmlBody: '<b>Во вложении архив журнала операций</b>',
name: "Автоматизированный кассир",
to: 'поставьте сюда адрес своей электронной почты',
subject: 'Архив журнала операций',
attachments: [fileToSend]
};
try {
MailApp.sendEmail(mail);
} catch (err) {Logger.log(err)};
}
function onOpen() {
var myDocUi=SpreadsheetApp.getUi();
myDocUi.createMenu('Кассовый отчет')
.addItem('Зафиксировать', 'fixReport')
.addToUi();
}
function fixReport() {
var thisId=SpreadsheetApp.getActiveSpreadsheet().getId();
var res=UrlFetchApp.fetch('https://Вставьте сюда адрес публикации своего API скрипта?table='+thisId);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment