function doPost(e) {
var dados = JSON.parse(e.postData.contents);
var ss = SpreadsheetApp.getActiveSpreadsheet();
if (dados.config) {
var aba = garantirAba(ss, "Configuracoes", ["Chave Pix", "Beneficiario", "URL Script", "Backup Auto", "Ultimo Backup", "Estado UF", "Licenca"]);
if(aba.getLastRow() > 1) aba.getRange(2,1,aba.getLastRow()-1, 7).clearContent();
var row = [
dados.config.chave_pix, dados.config.beneficiario, dados.config.url, dados.config.backup_auto,
"'" + dados.config.ultimo_backup,
dados.config.estado, dados.config.licenca
];
aba.getRange(2, 1, 1, row.length).setValues([row]);
}
if (dados.emitente) {
var abaEmit = garantirAba(ss, "Emitente", ["Nome", "cpf_cnpj", "inscricao", "Endereco", "Telefone", "Email"]);
if(abaEmit.getLastRow() > 1) abaEmit.getRange(2,1,abaEmit.getLastRow()-1, 6).clearContent();
var em = dados.emitente[0];
if (em) {
var row = [em.nome_empresa, em.cpf_cnpj, em.inscricao, em.endereco, em.telefone, em.email];
abaEmit.getRange(2, 1, 1, row.length).setValues([row]);
}
}
if (dados.clientes) processarTabelaSimples(ss, "Clientes", dados.clientes, ["ID", "Nome", "Documento", "Telefone", "Endereço"]);
if (dados.despesas) processarTabelaSimples(ss, "Despesas", dados.despesas, ["UUID", "Categoria ID", "Valor", "Data", "Descrição"]);
if (dados.produtos) processarTabelaSimples(ss, "Produtos", dados.produtos, ["ID", "Categoria", "Nome", "Unidade", "Preço Vista", "Preço Prazo"]);
if (dados.vendas) processarTabelaSimples(ss, "Vendas", dados.vendas, ["ID Item", "UUID Venda", "Data Venda", "Vencimento", "Cliente", "Produto", "Qtd", "Unidade", "Valor Unit.", "Subtotal", "Total Venda", "Pagamento", "Status", "Data Pagto", "Histórico Recálculo", "Parcelas JSON"
]);
return ContentService.createTextOutput(JSON.stringify({"status": "sucesso"}));
}
function garantirAba(ss, nomeAba, cabecalho) {
var aba = ss.getSheetByName(nomeAba);
if (!aba) {
aba = ss.insertSheet(nomeAba);
aba.appendRow(cabecalho);
}
return aba;
}
function processarTabelaSimples(ss, nomeAba, dadosApp, cabecalho) {
var aba = garantirAba(ss, nomeAba, cabecalho);
var lastRow = aba.getLastRow();
var idsPlanilha = [];
if (lastRow > 1) {
var rangeIds = aba.getRange(2, 1, lastRow - 1, 1).getValues();
for (var i = 0; i < rangeIds.length; i++) {
idsPlanilha.push(String(rangeIds[i][0]).trim());
}
}
var linhasParaDeletar = [];
for (var i = 0; i < dadosApp.length; i++) {
var item = dadosApp[i];
var chaveApp = String(item.chave).trim();
var indiceNoArray = idsPlanilha.indexOf(chaveApp);
if (item._deletar === true) {
if (indiceNoArray !== -1) {
linhasParaDeletar.push(indiceNoArray);
}
continue;
}
var linhaArray = objToArray(nomeAba, item);
if (linhaArray.length === 0) continue;
if (indiceNoArray !== -1) {
aba.getRange(indiceNoArray + 2, 1, 1, linhaArray.length).setValues([linhaArray]);
} else {
aba.appendRow(linhaArray);
idsPlanilha.push(chaveApp);
}
}
if (linhasParaDeletar.length > 0) {
var unicos = linhasParaDeletar.filter(function(item, pos) {
return linhasParaDeletar.indexOf(item) == pos;
});
unicos.sort(function(a, b){return b-a});
for (var k = 0; k < unicos.length; k++) {
var linhaReal = unicos[k] + 2;
aba.deleteRow(linhaReal);
}
}
}
function objToArray(tipo, obj) {
if (tipo == "Clientes") return [obj.id, obj.nome, obj.documento, obj.telefone, obj.endereco];
if (tipo == "Produtos") return [obj.id, obj.categoria, obj.nome, obj.unidade, obj.preco_vista, obj.preco_prazo];
if (tipo == "Despesas") return [obj.uuid, obj.categoria_id, obj.valor, "'" + obj.data, obj.descricao];
if (tipo == "Vendas") return [obj.uuid_item, obj.uuid_venda, "'" + obj.data_venda, "'" + obj.data_vencimento, obj.cliente, obj.produto, obj.quantidade, obj.unidade, obj.preco_unitario, obj.subtotal, obj.total_venda, obj.forma_pagamento, obj.status_pagamento, "'" + obj.data_pagamento, obj.historico_json, obj.parcelas_json];
return [];
}
function doGet(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var output = { "config": {}, "clientes": [], "produtos": [], "vendas": [] };
var configs = lerAba(ss, "Configuracoes", ["chave_pix", "beneficiario", "url", "backup_auto", "ultimo_backup", "estado", "Licenca"]);
var emitentes = lerAba(ss, "Emitente", ["nome_empresa", "cpf_cnpj", "inscricao", "endereco", "telefone", "email"]);
if(emitentes.length > 0) output.emitente = emitentes;
if(configs.length > 0) output.config = configs[configs.length - 1];
output.clientes = lerAba(ss, "Clientes", ["id", "nome", "documento", "telefone", "endereco"]);
output.produtos = lerAba(ss, "Produtos", ["id", "categoria_nome", "nome", "unidade_medida", "preco_vista", "preco_prazo"]);
output.despesas = lerAba(ss, "Despesas", ["uuid", "categoria_id", "valor", "data", "descricao"]);
output.vendas = lerAba(ss, "Vendas", ["uuid_item", "uuid_venda", "data_venda", "data_vencimento", "cliente_nome", "produto_nome", "quantidade", "unidade", "preco_unitario", "subtotal", "total_venda", "forma_pagamento", "status_pagamento", "data_pagamento", "historico_json", "parcelas_json"]);
return ContentService.createTextOutput(JSON.stringify(output)).setMimeType(ContentService.MimeType.JSON);
}
function lerAba(ss, nome, colunas) {
var aba = ss.getSheetByName(nome);
if (!aba) return [];
var dados = aba.getDataRange().getValues();
var lista = [];
for (var i = 1; i < dados.length; i++) {
var obj = {};
for (var c = 0; c < colunas.length; c++) { if(c < dados[i].length) obj[colunas[c]] = dados[i][c]; }
lista.push(obj);
}
return lista;
}