1999-10-22 10:00:18 +00:00
|
|
|
|
#include "ve6400a.h"
|
|
|
|
|
#include "velib.h"
|
|
|
|
|
|
2007-03-16 13:33:09 +00:00
|
|
|
|
#include <applicat.h>
|
|
|
|
|
#include <automask.h>
|
|
|
|
|
#include <defmask.h>
|
|
|
|
|
#include <execp.h>
|
|
|
|
|
|
|
|
|
|
#include <agasys.h>
|
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
// Maschera principale
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
class TScontrino_mask : public TAutomask
|
|
|
|
|
{
|
|
|
|
|
bool _ini_loaded;
|
|
|
|
|
TFilename _ini_name;
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
|
|
|
|
|
|
// Funzioni di invio ai registratori di cassa conosciuti
|
|
|
|
|
bool send_er400_data(bool extra);
|
2000-05-05 15:25:49 +00:00
|
|
|
|
bool send_scr_data();
|
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
|
public:
|
|
|
|
|
bool load_ini();
|
|
|
|
|
bool save_ini(KEY k);
|
|
|
|
|
|
|
|
|
|
bool load_profile();
|
|
|
|
|
bool save_profile();
|
|
|
|
|
|
|
|
|
|
bool send_data();
|
|
|
|
|
|
|
|
|
|
TScontrino_mask();
|
|
|
|
|
virtual ~TScontrino_mask();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
bool TScontrino_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
|
|
|
{
|
|
|
|
|
switch (o.dlg())
|
|
|
|
|
{
|
2007-03-16 13:33:09 +00:00
|
|
|
|
case DLG_PRINT:
|
1999-10-22 10:00:18 +00:00
|
|
|
|
if (e == fe_button)
|
|
|
|
|
{
|
|
|
|
|
if (send_data() && _ini_loaded)
|
|
|
|
|
stop_run(K_AUTO_ENTER);
|
2007-03-16 13:33:09 +00:00
|
|
|
|
return false;
|
1999-10-22 10:00:18 +00:00
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TScontrino_mask::load_profile()
|
|
|
|
|
{
|
|
|
|
|
TFilename f;
|
|
|
|
|
f =::firm2dir(-1); // Directory dati
|
|
|
|
|
f.add("config"); // Directory config
|
|
|
|
|
f.add(source_file()); // Nome Maschera
|
|
|
|
|
f.ext("ini"); // Estensione
|
|
|
|
|
TConfig ini(f, "Main");
|
|
|
|
|
set(F_REGISTRATORE, ini.get("Registratore"));
|
|
|
|
|
set(F_SALUTI, ini.get("Saluti", NULL, -1, "Arrivederci Grazie!"));
|
2007-09-17 15:33:04 +00:00
|
|
|
|
set(F_DOPPIOZERO, ini.get("DoppioZero", NULL, -1, "X"));
|
1999-10-22 10:00:18 +00:00
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TScontrino_mask::save_profile()
|
|
|
|
|
{
|
|
|
|
|
TFilename f;
|
|
|
|
|
f =::firm2dir(-1); // Directory dati
|
|
|
|
|
f.add("config"); // Directory config
|
|
|
|
|
f.add(source_file()); // Nome Maschera
|
|
|
|
|
f.ext("ini"); // Estensione
|
|
|
|
|
TConfig ini(f, "Main");
|
|
|
|
|
ini.set("Registratore", get(F_REGISTRATORE));
|
2007-09-17 15:33:04 +00:00
|
|
|
|
ini.set("Saluti", get(F_SALUTI));
|
|
|
|
|
ini.set("DoppioZero", get(F_DOPPIOZERO));
|
1999-10-22 10:00:18 +00:00
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TScontrino_mask::load_ini()
|
|
|
|
|
{
|
2007-03-16 13:33:09 +00:00
|
|
|
|
_ini_loaded = false;
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
|
|
|
|
const TApplication& a = main_app();
|
|
|
|
|
const int argc = a.argc();
|
|
|
|
|
if (argc <= 2)
|
2007-03-16 13:33:09 +00:00
|
|
|
|
return false;
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
|
|
|
|
TSheet_field& sheet = sfield(F_SHEET);
|
|
|
|
|
|
|
|
|
|
const TString& arg = a.argv(2);
|
|
|
|
|
if ((arg[0] != '-' && arg[0] != '/') || (arg[1] != 'i' && arg[1] != 'I'))
|
2007-03-16 13:33:09 +00:00
|
|
|
|
return false;
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
|
|
|
|
_ini_name = arg.mid(2);
|
|
|
|
|
if (_ini_name.blank() && argc > 3)
|
|
|
|
|
_ini_name = a.argv(3);
|
|
|
|
|
|
|
|
|
|
if (!_ini_name.exist())
|
2007-03-16 13:33:09 +00:00
|
|
|
|
return false;
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
2007-03-16 13:33:09 +00:00
|
|
|
|
TString8 para; para.format("%d", LF_DOC);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
TString tmp;
|
|
|
|
|
|
|
|
|
|
TDocumento doc;
|
|
|
|
|
|
|
|
|
|
TConfig ini(_ini_name, para);
|
|
|
|
|
TAssoc_array& vars = ini.list_variables();
|
|
|
|
|
FOR_EACH_ASSOC_STRING(vars, obj, key, str)
|
|
|
|
|
{
|
|
|
|
|
if (*str == '"')
|
|
|
|
|
{
|
|
|
|
|
tmp = str;
|
|
|
|
|
tmp.strip("\"");
|
|
|
|
|
str = tmp;
|
|
|
|
|
}
|
|
|
|
|
doc.put(key, str);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const TString& cofi = doc.clifor().get(CLI_COFI);
|
2007-03-16 13:33:09 +00:00
|
|
|
|
if (cofi.full())
|
1999-10-22 10:00:18 +00:00
|
|
|
|
set(F_COFI, cofi);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
const TString& piva = doc.clifor().get(CLI_PAIV);
|
|
|
|
|
set(F_COFI, piva);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int i = 1; ; i++)
|
|
|
|
|
{
|
|
|
|
|
para.format("%d,%d", LF_RIGHEDOC, i);
|
|
|
|
|
if (!ini.set_paragraph(para))
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
const TString& tiporiga = ini.get(RDOC_TIPORIGA);
|
2007-03-16 13:33:09 +00:00
|
|
|
|
if (tiporiga.full())
|
1999-10-22 10:00:18 +00:00
|
|
|
|
{
|
2007-03-16 13:33:09 +00:00
|
|
|
|
TRiga_documento& rdoc = doc.new_row(tiporiga);
|
|
|
|
|
TAssoc_array& vars = ini.list_variables();
|
|
|
|
|
FOR_EACH_ASSOC_STRING(vars, obj, key, str)
|
1999-10-22 10:00:18 +00:00
|
|
|
|
{
|
2007-03-16 13:33:09 +00:00
|
|
|
|
if (*str == '"')
|
|
|
|
|
{
|
|
|
|
|
tmp = str;
|
|
|
|
|
tmp.strip("\"");
|
|
|
|
|
str = tmp;
|
|
|
|
|
}
|
|
|
|
|
rdoc.put(key, str);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
}
|
|
|
|
|
|
2007-03-16 13:33:09 +00:00
|
|
|
|
if (rdoc.is_articolo())
|
|
|
|
|
{
|
|
|
|
|
const TString80 codart = rdoc.get(RDOC_CODARTMAG);
|
|
|
|
|
|
|
|
|
|
TToken_string& row = sheet.row(-1); // Crea un nuova riga
|
|
|
|
|
row = codart; // Codice articolo
|
|
|
|
|
row.add(rdoc.get(RDOC_DESCR)); // Descrizione riga
|
|
|
|
|
row.add(rdoc.get(RDOC_QTA)); // Quantita'
|
|
|
|
|
row.add(rdoc.prezzo(true, true).string()); // Prezzo lordo scontato
|
|
|
|
|
row.add(cache().get(LF_ANAMAG, codart, ANAMAG_REPARTO)); // Reparto
|
|
|
|
|
}
|
|
|
|
|
}
|
1999-10-22 10:00:18 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_ini_loaded = sheet.items() > 0;
|
|
|
|
|
return _ini_loaded;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TScontrino_mask::save_ini(KEY k)
|
|
|
|
|
{
|
|
|
|
|
bool ok = _ini_loaded && _ini_name.exist();
|
|
|
|
|
if (ok)
|
|
|
|
|
{
|
|
|
|
|
TConfig ini(_ini_name, "Main");
|
|
|
|
|
ini.set("Result", k == K_ENTER ? "OK" : "CANCEL");
|
|
|
|
|
ini.set("Error", "0");
|
|
|
|
|
|
2007-03-16 13:33:09 +00:00
|
|
|
|
const TString& eld = ini.get("Action");
|
|
|
|
|
const TString& stato_finale = cache().get("%ELD", eld, "S4");
|
|
|
|
|
if (stato_finale.full())
|
1999-10-22 10:00:18 +00:00
|
|
|
|
{
|
2007-03-16 13:33:09 +00:00
|
|
|
|
TString4 para; para.format("%d", LF_DOC);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
ini.set(DOC_STATO, stato_finale, para);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return ok;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TScontrino_mask::send_er400_data(bool extra)
|
|
|
|
|
{
|
2007-03-16 13:33:09 +00:00
|
|
|
|
TSheet_field& sheet = sfield(F_SHEET);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
const int rows = sheet.items();
|
|
|
|
|
if (rows <= 0)
|
2007-03-16 13:33:09 +00:00
|
|
|
|
return false;
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
2007-03-16 13:33:09 +00:00
|
|
|
|
TMask m(TR("Modalita' di pagamento"), 1, 26, 8);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
m.add_radio(101, 0, "", 1, 0, 24,
|
|
|
|
|
"CASH|TICK|ASS|CARD|CRT",
|
2007-03-16 13:33:09 +00:00
|
|
|
|
HR("Contanti|Buoni|Assegno|Carta di Credito|Credito"));
|
|
|
|
|
m.add_button(DLG_OK, 0, "", -12, -1, 10, 2);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
m.add_button(DLG_CANCEL, 0, "", -22, -1, 10, 2);
|
|
|
|
|
if (m.run() != K_ENTER)
|
2007-03-16 13:33:09 +00:00
|
|
|
|
return false;
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
2007-03-16 13:33:09 +00:00
|
|
|
|
const char* const server = "Sidcomm95";
|
|
|
|
|
const char* const topic = server; // Ignoranza totale delle regole di buona programmazione DDE!
|
|
|
|
|
|
|
|
|
|
const unsigned int conn = aga_dde_connect("localhost", server, topic);
|
|
|
|
|
if (conn == 0)
|
|
|
|
|
return error_box(FR("Impossibile stabilire una comunicazione DDE con %s"), server);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
|
|
|
|
TString80 cmd, tmp;
|
|
|
|
|
|
2007-03-16 13:33:09 +00:00
|
|
|
|
if (extra && !field(F_COFI).empty())
|
|
|
|
|
{
|
|
|
|
|
cmd = "[CODF,";
|
|
|
|
|
cmd << get(F_COFI) << ']';
|
|
|
|
|
aga_dde_execute(conn, cmd);
|
|
|
|
|
}
|
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
|
const int text_len = extra ? 18 : 15;
|
|
|
|
|
TParagraph_string para("", text_len);
|
|
|
|
|
|
|
|
|
|
const int pos_descr = sheet.cid2index(F_DESCART);
|
|
|
|
|
const int pos_prezzo = sheet.cid2index(F_PREZZO);
|
|
|
|
|
const int pos_rep = sheet.cid2index(F_REPARTO);
|
|
|
|
|
const int pos_qta = sheet.cid2index(F_QTA);
|
|
|
|
|
for (int r = 0; r < rows; r++)
|
|
|
|
|
{
|
|
|
|
|
const TToken_string& row = sheet.row(r);
|
|
|
|
|
cmd = "[PLU,";
|
|
|
|
|
|
|
|
|
|
row.get(pos_descr, tmp);
|
|
|
|
|
if (tmp.blank()) continue;
|
|
|
|
|
|
|
|
|
|
tmp.replace(',', ' '); tmp.replace('[', '('); tmp.replace(']', ')');
|
|
|
|
|
para = tmp;
|
|
|
|
|
cmd << para.get(0);
|
|
|
|
|
|
|
|
|
|
real price; row.get(pos_prezzo, price);
|
2007-09-17 15:33:04 +00:00
|
|
|
|
tmp = price.string(text_len, 2); tmp.trim();
|
|
|
|
|
if (tmp.ends_with(".00") && get_bool(F_DOPPIOZERO))
|
|
|
|
|
tmp.strip(".");
|
|
|
|
|
cmd << ',' << tmp;
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
|
|
|
|
int rep; row.get(pos_rep, rep);
|
|
|
|
|
if (rep <= 0 || rep > 25) rep = 1;
|
|
|
|
|
cmd << ',' << rep;
|
|
|
|
|
|
|
|
|
|
real qta; row.get(pos_qta, qta);
|
2007-09-17 15:33:04 +00:00
|
|
|
|
tmp = qta.string(10, 5); tmp.trim();
|
|
|
|
|
cmd << ',' << tmp << ']';
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
2007-03-16 13:33:09 +00:00
|
|
|
|
aga_dde_execute(conn, cmd);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (extra)
|
|
|
|
|
{
|
2007-03-16 13:33:09 +00:00
|
|
|
|
para = get(F_SALUTI); // ARRIVEDERCI E GRAZIE!
|
|
|
|
|
for (int i = 1; i <= 2; i++)
|
1999-10-22 10:00:18 +00:00
|
|
|
|
{
|
2007-03-16 13:33:09 +00:00
|
|
|
|
tmp = para.get();
|
|
|
|
|
if (tmp.full())
|
1999-10-22 10:00:18 +00:00
|
|
|
|
{
|
|
|
|
|
tmp.replace(',', ' '); tmp.replace('[', '('); tmp.replace(']', ')');
|
2007-03-16 13:33:09 +00:00
|
|
|
|
cmd.format("[TXT%d,%s]", i, (const char*)tmp);
|
|
|
|
|
aga_dde_execute(conn, cmd);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2007-03-16 13:33:09 +00:00
|
|
|
|
cmd.cut(0) << '[' << m.get(101) << ']';
|
|
|
|
|
aga_dde_execute(conn, cmd);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
2007-03-16 13:33:09 +00:00
|
|
|
|
aga_dde_terminate(conn);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
2007-03-16 13:33:09 +00:00
|
|
|
|
return true;
|
1999-10-22 10:00:18 +00:00
|
|
|
|
}
|
|
|
|
|
|
2000-05-05 15:25:49 +00:00
|
|
|
|
|
|
|
|
|
bool TScontrino_mask::send_scr_data()
|
|
|
|
|
{
|
|
|
|
|
TSheet_field& sheet = sfield(F_SHEET);
|
|
|
|
|
const int rows = sheet.items();
|
|
|
|
|
if (rows <= 0)
|
2007-03-16 13:33:09 +00:00
|
|
|
|
return false;
|
2000-05-05 15:25:49 +00:00
|
|
|
|
|
|
|
|
|
ofstream o("input.scr");
|
|
|
|
|
|
|
|
|
|
o<<"$max_num_dept=20;"<<endl;
|
|
|
|
|
|
|
|
|
|
const int pos_code = sheet.cid2index(F_CODART);
|
|
|
|
|
const int pos_prezzo = sheet.cid2index(F_PREZZO);
|
2004-04-28 22:11:22 +00:00
|
|
|
|
// const int pos_rep = sheet.cid2index(F_REPARTO);
|
2000-05-05 15:25:49 +00:00
|
|
|
|
const int pos_qta = sheet.cid2index(F_QTA);
|
|
|
|
|
|
|
|
|
|
TString codart, grmerc, descr;
|
|
|
|
|
real prezzo, qta;
|
|
|
|
|
|
|
|
|
|
for (int r = 0; r < rows; r++)
|
|
|
|
|
{
|
|
|
|
|
const TToken_string& row = sheet.row(r);
|
|
|
|
|
|
|
|
|
|
row.get(pos_code, codart);
|
|
|
|
|
|
|
|
|
|
grmerc = cache().get(LF_ANAMAG,codart).get(ANAMAG_GRMERC);
|
|
|
|
|
|
|
|
|
|
descr = cache().get("GMC",grmerc).get("S0"); //trova nella tabella GMC il record descrizione che corrisponde
|
|
|
|
|
//a grmerc e prende il campo S0, che <20> la descrizione estesa del
|
|
|
|
|
//gruppo merceologico codificato da grmerc
|
|
|
|
|
grmerc = grmerc.mid(1,2);
|
|
|
|
|
descr.cut(15);
|
|
|
|
|
|
|
|
|
|
row.get(pos_prezzo,prezzo);
|
|
|
|
|
row.get(pos_qta,qta);
|
|
|
|
|
real tot = qta * prezzo;
|
2007-03-16 13:33:09 +00:00
|
|
|
|
tot.round(0);
|
2000-05-05 15:25:49 +00:00
|
|
|
|
|
|
|
|
|
o << "plud,c,:" << descr << ",n" << grmerc << ",p" << tot.string("@@@@@@@@@@@") << ";"<<endl;
|
|
|
|
|
}
|
|
|
|
|
|
2007-03-16 13:33:09 +00:00
|
|
|
|
o << "cash;" << endl;
|
|
|
|
|
o.close(); // forza la chiusura del file
|
2000-05-05 15:25:49 +00:00
|
|
|
|
|
|
|
|
|
TExternal_app a("pos1 input.scr");
|
2007-03-16 13:33:09 +00:00
|
|
|
|
a.run(false,false);
|
2000-05-05 15:25:49 +00:00
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
|
bool TScontrino_mask::send_data()
|
|
|
|
|
{
|
2007-03-16 13:33:09 +00:00
|
|
|
|
bool ok = false;
|
1999-10-22 10:00:18 +00:00
|
|
|
|
const TString& reg = get(F_REGISTRATORE);
|
|
|
|
|
if (reg == "ER400")
|
2007-03-16 13:33:09 +00:00
|
|
|
|
ok = send_er400_data(true); else
|
1999-10-22 10:00:18 +00:00
|
|
|
|
if (reg == "ER315")
|
2007-03-16 13:33:09 +00:00
|
|
|
|
ok = send_er400_data(false); else
|
2000-05-05 15:25:49 +00:00
|
|
|
|
if (reg == "SCR")
|
2007-03-16 13:33:09 +00:00
|
|
|
|
ok = send_scr_data();
|
1999-10-22 10:00:18 +00:00
|
|
|
|
return ok;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TScontrino_mask::TScontrino_mask()
|
2007-03-16 13:33:09 +00:00
|
|
|
|
: TAutomask("ve6400a"), _ini_loaded(false)
|
1999-10-22 10:00:18 +00:00
|
|
|
|
{ load_profile(); }
|
|
|
|
|
|
|
|
|
|
TScontrino_mask::~TScontrino_mask()
|
|
|
|
|
{ save_profile(); }
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
// Applicazione principale
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
class TCoulthard : public TSkeleton_application
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
virtual void main_loop();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void TCoulthard::main_loop()
|
|
|
|
|
{
|
|
|
|
|
open_files(LF_TAB, LF_TABCOM, LF_DOC, LF_RIGHEDOC, NULL);
|
|
|
|
|
open_files(LF_ANAMAG, LF_CLIFO, LF_CFVEN, LF_OCCAS, NULL);
|
|
|
|
|
TScontrino_mask m;
|
|
|
|
|
const bool loaded = m.load_ini();
|
2007-03-16 13:33:09 +00:00
|
|
|
|
const KEY k = m.run();
|
1999-10-22 10:00:18 +00:00
|
|
|
|
if (loaded)
|
|
|
|
|
m.save_ini(k);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ve6400(int argc, char** argv)
|
|
|
|
|
{
|
|
|
|
|
TCoulthard app;
|
2007-03-16 13:33:09 +00:00
|
|
|
|
app.run(argc, argv, TR("Scontrino"));
|
1999-10-22 10:00:18 +00:00
|
|
|
|
return 0;
|
|
|
|
|
}
|