2011-04-05 08:16:55 +00:00
|
|
|
|
#include <applicat.h>
|
|
|
|
|
#include <automask.h>
|
|
|
|
|
#include <progind.h>
|
|
|
|
|
#include <recarray.h>
|
|
|
|
|
#include <recset.h>
|
|
|
|
|
#include <reputils.h>
|
|
|
|
|
#include <textset.h>
|
|
|
|
|
#include <utility.h>
|
|
|
|
|
|
2011-04-12 13:38:18 +00:00
|
|
|
|
#include <nditte.h>
|
|
|
|
|
#include <anagr.h>
|
|
|
|
|
#include <comuni.h>
|
|
|
|
|
#include <clifo.h>
|
2011-04-05 08:16:55 +00:00
|
|
|
|
#include <doc.h>
|
|
|
|
|
#include <rdoc.h>
|
|
|
|
|
#include "../mg/codcorr.h"
|
|
|
|
|
#include "../cg/cglib01.h"
|
|
|
|
|
#include "../ve/velib.h"
|
|
|
|
|
|
2011-04-12 13:38:18 +00:00
|
|
|
|
#include "halib.h"
|
|
|
|
|
|
2011-04-05 08:16:55 +00:00
|
|
|
|
#include "ha2.h"
|
|
|
|
|
#include "ha2200a.h"
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
// TAutomask
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
class THardy_esselunga_fat_mask : public TAutomask
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
THardy_esselunga_fat_mask();
|
|
|
|
|
virtual ~THardy_esselunga_fat_mask() {};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
THardy_esselunga_fat_mask::THardy_esselunga_fat_mask() : TAutomask ("ha2200a")
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool THardy_esselunga_fat_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
|
|
|
// Recordset per file fatture
|
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
|
|
|
|
2011-04-21 10:36:26 +00:00
|
|
|
|
// AN = alfanumerico
|
|
|
|
|
// NU = numerico zero filled
|
|
|
|
|
// NS = numerico zerofilled con segno
|
|
|
|
|
// DA = data
|
|
|
|
|
enum TFE_type { AN, NU, NS, NN, DA };
|
|
|
|
|
|
2011-04-05 08:16:55 +00:00
|
|
|
|
|
|
|
|
|
class TFatture_recordset : public TAS400_recordset
|
|
|
|
|
{
|
2011-04-13 13:26:49 +00:00
|
|
|
|
protected:
|
|
|
|
|
void add_field(const char* name, TFE_type type, int len, int pos,
|
|
|
|
|
bool required = false, const char* def = NULL);
|
2011-04-05 08:16:55 +00:00
|
|
|
|
public:
|
2011-04-19 13:31:56 +00:00
|
|
|
|
bool set(const char* name, const TVariant& value);
|
2011-04-13 13:26:49 +00:00
|
|
|
|
virtual TRecnotype new_rec(const char* trc);
|
2011-04-12 13:38:18 +00:00
|
|
|
|
TFatture_recordset();
|
2011-04-05 08:16:55 +00:00
|
|
|
|
};
|
|
|
|
|
|
2011-04-13 13:26:49 +00:00
|
|
|
|
TRecnotype TFatture_recordset::new_rec(const char* trc)
|
|
|
|
|
{
|
|
|
|
|
TRecnotype rec = -1;
|
|
|
|
|
if (trc && *trc > ' ')
|
|
|
|
|
{
|
|
|
|
|
rec = TAS400_recordset::new_rec(trc);
|
|
|
|
|
TToken_string& line = row(rec);
|
|
|
|
|
const int acapo = line.rfind('\n');
|
|
|
|
|
if (acapo>0)
|
|
|
|
|
line.cut(acapo+1);
|
|
|
|
|
}
|
|
|
|
|
return rec;
|
|
|
|
|
}
|
|
|
|
|
|
2011-04-19 13:31:56 +00:00
|
|
|
|
bool TFatture_recordset::set(const char* name, const TVariant& value)
|
|
|
|
|
{
|
|
|
|
|
bool ok = false;
|
|
|
|
|
if (!value.is_empty())
|
|
|
|
|
{
|
|
|
|
|
if (value.is_date())
|
|
|
|
|
{
|
|
|
|
|
const TDate date = value.as_date();
|
|
|
|
|
TString8 str;
|
2011-04-22 09:13:03 +00:00
|
|
|
|
str.format("%04d%02d%02d", date.year(), date.month(), date.day());
|
2011-04-19 13:31:56 +00:00
|
|
|
|
ok = TAS400_recordset::set(name, TVariant(str));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
if (value.is_real())
|
|
|
|
|
{
|
|
|
|
|
real r = value.as_real()*1000;
|
|
|
|
|
TString16 str = r.string(16,0,'0');
|
|
|
|
|
if (r>ZERO)
|
|
|
|
|
str.overwrite("+",0,1);
|
|
|
|
|
else
|
|
|
|
|
if (r<ZERO)
|
|
|
|
|
str.overwrite("-",0,1);
|
|
|
|
|
else
|
|
|
|
|
str.overwrite(" ",0,1);
|
|
|
|
|
ok = TAS400_recordset::set(name, TVariant(str));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
ok = TAS400_recordset::set(name, value);
|
|
|
|
|
}
|
|
|
|
|
return ok;
|
|
|
|
|
}
|
|
|
|
|
|
2011-04-05 08:16:55 +00:00
|
|
|
|
void TFatture_recordset::add_field(const char* name, TFE_type type, int len, int pos,
|
2011-04-06 13:32:29 +00:00
|
|
|
|
bool required, const char* def)
|
2011-04-05 08:16:55 +00:00
|
|
|
|
{
|
|
|
|
|
CHECKS(len > 0, "Lunghezza nulla sul campo ", name);
|
2011-04-13 13:26:49 +00:00
|
|
|
|
CHECKS(pos >= 0, "Posizione non valida sul campo ", name);
|
2011-04-05 08:16:55 +00:00
|
|
|
|
|
|
|
|
|
TFieldtypes ft = _alfafld;
|
|
|
|
|
switch (type)
|
|
|
|
|
{
|
|
|
|
|
case NU:
|
2011-04-19 13:31:56 +00:00
|
|
|
|
ft = _longzerofld;
|
|
|
|
|
break;
|
|
|
|
|
case DA:
|
|
|
|
|
CHECKS(len == 8, "Lunghezza incoerente data ", name);
|
|
|
|
|
ft = _longzerofld;
|
2011-04-05 08:16:55 +00:00
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
ft = _alfafld;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
bool ok = false;
|
|
|
|
|
if (def && *def)
|
2011-04-13 13:26:49 +00:00
|
|
|
|
ok = create_field(name, pos-1, len, ft, required, TVariant(def));
|
2011-04-05 08:16:55 +00:00
|
|
|
|
else
|
2011-04-13 13:26:49 +00:00
|
|
|
|
ok = create_field(name, pos-1, len, ft, required);
|
2011-04-05 08:16:55 +00:00
|
|
|
|
CHECKS(ok, "Impossibile creare il campo ", (const char*)name);
|
|
|
|
|
}
|
|
|
|
|
|
2011-04-12 13:38:18 +00:00
|
|
|
|
TFatture_recordset::TFatture_recordset()
|
2011-04-13 13:26:49 +00:00
|
|
|
|
: TAS400_recordset("AS400(612,3,0)")
|
2011-04-05 08:16:55 +00:00
|
|
|
|
{
|
2011-04-12 13:38:18 +00:00
|
|
|
|
// dati di configurazione
|
2011-04-05 08:16:55 +00:00
|
|
|
|
TConfig config(CONFIG_DITTA, "ha");
|
|
|
|
|
const TString80 piva_hardy = config.get("Esselunga_PIvaHardy");
|
|
|
|
|
const TString80 piva_esselunga = config.get("Esselunga_PIvaEsselunga");
|
|
|
|
|
const TString8 tipo_emissione = config.get("Esselunga_TipoEmissione");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
const long codcli_esselunga = config.get_long("Esselunga_CodEsselunga");
|
2011-04-05 08:16:55 +00:00
|
|
|
|
const TString80 cod_hardy = config.get("Esselunga_CodHardy");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
|
|
|
|
|
// record cliente Esselunga
|
|
|
|
|
TToken_string key;
|
|
|
|
|
key.add("C"); key.add(codcli_esselunga);
|
|
|
|
|
const TRectype& cliente_esselunga = cache().get(LF_CLIFO, key);
|
|
|
|
|
TString4 stato = cliente_esselunga.get(CLI_STATOCF);
|
|
|
|
|
TString4 comune = cliente_esselunga.get(CLI_COMCF);
|
|
|
|
|
key.cut(0);
|
|
|
|
|
key.add(stato); key.add(comune);
|
|
|
|
|
const TRectype& com_esselunga = cache().get(LF_COMUNI, key);
|
|
|
|
|
|
|
|
|
|
// ditta
|
|
|
|
|
const TFirm& ditta = prefix().firm();
|
|
|
|
|
// record anag
|
|
|
|
|
const char tipoa = ditta.get(NDT_TIPOA)[0];
|
|
|
|
|
const long codanagr = ditta.get_long(NDT_CODANAGR);
|
|
|
|
|
key.cut(0);
|
|
|
|
|
key.add(tipoa); key.add(codanagr);
|
|
|
|
|
const TRectype& anag = cache().get(LF_ANAG, key);
|
|
|
|
|
|
|
|
|
|
// record anagiu
|
|
|
|
|
key.cut(0);
|
|
|
|
|
key.add(codanagr);
|
|
|
|
|
const TRectype& anagiu = cache().get(LF_ANAGGIU, key);
|
2011-04-05 08:16:55 +00:00
|
|
|
|
|
2011-04-12 13:38:18 +00:00
|
|
|
|
// record comuni per hardy
|
|
|
|
|
stato = anag.get(ANA_STATORES);
|
|
|
|
|
comune = anag.get(ANA_COMRES);
|
|
|
|
|
key.add(stato, 0); key.add(comune, 1);
|
|
|
|
|
const TRectype& comres = cache().get(LF_COMUNI, key);
|
2011-04-05 08:16:55 +00:00
|
|
|
|
|
2011-04-12 13:38:18 +00:00
|
|
|
|
// *** Sezione di intestazione fattura ***
|
2011-04-05 08:16:55 +00:00
|
|
|
|
|
2011-04-12 13:38:18 +00:00
|
|
|
|
// Record BGM: nome documento e numero fattura
|
|
|
|
|
add_field("BGM.TIPOREC", AN, 3, 1, true, "BGM");
|
|
|
|
|
add_field("BGM.ID-EDI-MITT-1", AN, 35, 4, true, piva_hardy);
|
|
|
|
|
add_field("BGM.ID-EDI-MITT-2", AN, 4, 39, true, tipo_emissione);
|
|
|
|
|
add_field("BGM.ID-EDI-MITT-3", AN, 14, 43);
|
|
|
|
|
add_field("BGM.ID-EDI-DEST-1", AN, 35, 57, true, piva_esselunga);
|
|
|
|
|
add_field("BGM.ID-EDI-DEST-2", AN, 4, 92, true, tipo_emissione);
|
|
|
|
|
add_field("BGM.ID-EDI-DEST-3", AN, 14, 96);
|
2011-04-29 14:10:53 +00:00
|
|
|
|
add_field("BGM.TIPODOC", AN, 6, 110, true);
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("BGM.NUMDOC", AN, 35, 116, true);
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("BGM.DATADOC", DA, 8, 151, true);
|
2011-04-29 14:10:53 +00:00
|
|
|
|
add_field("BGM.ORADOC", AN, 4, 159);
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("BGM.FILLER", AN, 6, 163);
|
2011-04-18 13:11:46 +00:00
|
|
|
|
add_field("BGM.FINERECORD", AN, 2, 0, true, "\r\n");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
|
|
|
|
|
TString80 str;
|
2011-04-21 11:30:41 +00:00
|
|
|
|
str << anag.get(ANA_INDRES) << ", " << anag.get(ANA_CIVRES);
|
2011-04-05 08:16:55 +00:00
|
|
|
|
|
2011-04-12 13:38:18 +00:00
|
|
|
|
// Record NAS: identificazione mittente
|
|
|
|
|
add_field("NAS.TIPOREC", AN, 3, 1, true, "NAS");
|
|
|
|
|
add_field("NAS.CODFORN", AN, 17, 4, true, cod_hardy);
|
|
|
|
|
add_field("NAS.QCODFORN", AN, 3, 21, true, "92");
|
|
|
|
|
add_field("NAS.RAGSOCF", AN, 70, 24, true, ditta.ragione_sociale());
|
|
|
|
|
add_field("NAS.INDIRF", AN, 70, 94, true, str);
|
|
|
|
|
add_field("NAS.CITTAF", AN, 35, 164, true, comres.get(COM_DENCOM));
|
|
|
|
|
add_field("NAS.PROVF", AN, 9, 199, true, comres.get(COM_PROVCOM));
|
|
|
|
|
add_field("NAS.CAPF", AN, 9, 208, true, anag.get(ANA_CAPRES));
|
2011-04-21 11:30:41 +00:00
|
|
|
|
stato = anag.get(ANA_STATORES);
|
|
|
|
|
if (stato.empty())
|
|
|
|
|
stato = "IT";
|
|
|
|
|
add_field("NAS.NAZIOF", AN, 3, 217, true, stato);
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("NAS.PIVANAZF", AN, 35, 220, true, anag.get(ANA_PAIV));
|
|
|
|
|
add_field("NAS.TRIBUNALE", AN, 35, 255, true, "MILANO");
|
|
|
|
|
add_field("NAS.LICIMPEXP", AN, 35, 290);
|
|
|
|
|
add_field("NAS.CCIAA", AN, 35, 325, true, ditta.get(NDT_NISCRAA));
|
|
|
|
|
add_field("NAS.CAPSOC", AN, 35, 360, true, anagiu.get("CAPSOC"));
|
2011-04-22 09:13:03 +00:00
|
|
|
|
add_field("NAS.CODFISC", NU, 16, 395, true, anag.get(ANA_COFI));
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("NAS.PIVAINT", AN, 35, 430);
|
|
|
|
|
add_field("NAS.TELEFONO", AN, 25, 465);
|
|
|
|
|
add_field("NAS.TELEFAX", AN, 25, 490);
|
|
|
|
|
add_field("NAS.TELEX", AN, 25, 515);
|
|
|
|
|
add_field("NAS.EMAIL", AN, 70, 540);
|
2011-04-18 13:11:46 +00:00
|
|
|
|
add_field("NAS.FINERECORD", AN, 2, 0, true, "\r\n");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
|
|
|
|
|
str.cut(0);
|
|
|
|
|
str << cliente_esselunga.get(CLI_INDCF) << ", " << cliente_esselunga.get(CLI_CIVCF);
|
|
|
|
|
|
|
|
|
|
// Record NAI: identificazione destinatario
|
|
|
|
|
add_field("NAI.TIPOREC", AN, 3, 1, true, "NAI");
|
2011-04-21 10:36:26 +00:00
|
|
|
|
add_field("NAI.CODFATT", AN, 17, 4, true, cliente_esselunga.get(CLI_PAIV));
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("NAI.QCODFATT", AN, 3, 21, true, "VA");
|
|
|
|
|
add_field("NAI.RAGSOCI", AN, 70, 24, true, cliente_esselunga.get(CLI_RAGSOC));
|
|
|
|
|
add_field("NAI.INDIRI", AN, 70, 94, true, str);
|
|
|
|
|
add_field("NAI.CITTAI", AN, 35, 164, true, com_esselunga.get(COM_DENCOM));
|
|
|
|
|
add_field("NAI.PROVI", AN, 9, 199, true, com_esselunga.get(COM_PROVCOM));
|
|
|
|
|
add_field("NAI.CAPI", AN, 9, 208, true, cliente_esselunga.get(CLI_CAPCF));
|
2011-04-21 11:30:41 +00:00
|
|
|
|
stato = cliente_esselunga.get(CLI_STATOCF);
|
|
|
|
|
if (stato.empty())
|
|
|
|
|
stato = "IT";
|
|
|
|
|
add_field("NAI.NAZIOI", AN, 3, 217, true, stato);
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("NAI.PIVANAZI", AN, 35, 220, true, cliente_esselunga.get(CLI_PAIV));
|
|
|
|
|
add_field("NAI.FILLER", AN, 51, 255);
|
2011-04-18 13:11:46 +00:00
|
|
|
|
add_field("NAI.FINERECORD", AN, 2, 0, true, "\r\n");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
|
|
|
|
|
// Record FTX: divisa di pagamento
|
|
|
|
|
add_field("FTX.TIPOREC", AN, 3, 1, true, "FTX");
|
|
|
|
|
add_field("FTX.DIVISA", AN, 3, 4, true, "EUR");
|
|
|
|
|
add_field("FTX.NOTE", AN,350, 7);
|
2011-04-18 13:11:46 +00:00
|
|
|
|
add_field("FTX.FINERECORD", AN, 2, 0, true, "\r\n");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
|
|
|
|
|
// Record PAT: condizioni di pagamento standard
|
|
|
|
|
add_field("PAT.TIPOREC", AN, 3, 1, true, "PAT");
|
|
|
|
|
add_field("PAT.TIPOCONDC", AN, 3, 4, true, "10E");
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("PAT.DATASCAD", DA, 8, 7);
|
2011-04-13 13:26:49 +00:00
|
|
|
|
add_field("PAT.RIFTERMP", AN, 3, 15, true, "5");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("PAT.RELTERMP", AN, 3, 18);
|
2011-04-21 14:06:33 +00:00
|
|
|
|
add_field("PAT.UNTEMP", AN, 3, 21, true, "D");
|
|
|
|
|
add_field("PAT.NUNTEMP", AN, 3, 24); // alfanumerico per non zerofillarlo
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("PAT.IMPORTO", NS, 16, 27);
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("PAT.DIVISA", AN, 3, 43);
|
2011-04-21 14:06:33 +00:00
|
|
|
|
add_field("PAT.PERC", AN, 7, 46); // alfa per non zerofilled
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("PAT.DESCRIZ", AN, 35, 53, true);
|
|
|
|
|
add_field("PAT.BANCACOD", AN, 35, 88);
|
|
|
|
|
add_field("PAT.BANCADESC", AN, 35, 123);
|
|
|
|
|
add_field("PAT.FACTOR", AN, 35, 158);
|
|
|
|
|
add_field("PAT.CODPAG", AN, 3, 193);
|
|
|
|
|
add_field("PAT.MEZZOPAG", AN, 3, 196);
|
2011-04-18 13:11:46 +00:00
|
|
|
|
add_field("PAT.FINERECORD", AN, 2, 0, true, "\r\n");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
|
|
|
|
|
// *** Sezione di dettaglio fattura ***
|
|
|
|
|
|
|
|
|
|
// Record DET: identificazione, quantita'e prezzi articolo
|
|
|
|
|
add_field("DET.TIPOREC", AN, 3, 1, true, "DET");
|
|
|
|
|
add_field("DET.NUMRIGA", NU, 6, 4, true);
|
|
|
|
|
add_field("DET.IDSOTTOR", AN, 3, 10);
|
2011-11-15 11:18:51 +00:00
|
|
|
|
add_field("DET.NUMSRIGA", AN, 6, 13); // AN perche' e' un campo che non c'e' mai e non deve essere zerofilled
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("DET.CODEANCU", AN, 35, 19, true);
|
|
|
|
|
add_field("DET.TIPCODCU", AN, 3, 54, true, "EN");
|
|
|
|
|
add_field("DET.CODEANTU", AN, 35, 57);
|
|
|
|
|
add_field("DET.CODFORTU", AN, 35, 92);
|
|
|
|
|
add_field("DET.CODDISTU", AN, 35, 127);
|
|
|
|
|
add_field("DET.TIPQUANT", AN, 3, 162);
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("DET.QTACONS", NS, 16, 165);
|
2011-04-21 14:06:33 +00:00
|
|
|
|
add_field("DET.UDMQCONS", AN, 3, 181, true, "PCE");
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("DET.QTAFATT", NS, 16, 184);
|
2011-04-21 14:06:33 +00:00
|
|
|
|
add_field("DET.UDMQFATT", AN, 3, 200, true, "PCE");
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("DET.NRCUINTU", NS, 16, 203, true);
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("DET.UDMNRCUINTU", AN, 3, 219, true, "PCE");
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("DET.PRZUNI", NS, 16, 222, true);
|
2011-04-21 14:06:33 +00:00
|
|
|
|
add_field("DET.TIPORPZ", AN, 3, 238, true, "AAB"); // prezzo lordo
|
|
|
|
|
add_field("DET.UDMPRZUN", AN, 3, 241, true, "PCE");
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("DET.PRZUN2", NS, 16, 244, true);
|
2011-04-21 14:06:33 +00:00
|
|
|
|
add_field("DET.TIPOPRZ2", AN, 3, 260, true, "AAA"); // prezzo netto
|
|
|
|
|
add_field("DET.UDMPRZUN2", AN, 3, 263, true, "PCE");
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("DET.IMPORTO", NS, 16, 266, true);
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("DET.DIVRIGA", AN, 3, 282);
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("DET.IMPORTO2", NS, 16, 285);
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("DET.DIVRIGA2", AN, 3, 301);
|
2011-04-18 13:11:46 +00:00
|
|
|
|
add_field("DET.FINERECORD", AN, 2, 0, true, "\r\n");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
|
|
|
|
|
// Record DES: descrizione articolo
|
|
|
|
|
add_field("DES.TIPOREC", AN, 3, 1, true, "DES");
|
2011-04-21 14:06:33 +00:00
|
|
|
|
add_field("DES.DESCR", AN,175, 4, true);
|
2011-04-18 13:11:46 +00:00
|
|
|
|
add_field("DES.FINERECORD", AN, 2, 0, true, "\r\n");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
|
|
|
|
|
// Record RFN: riferimenti fatture (obbligatorio per note di credito e debito)
|
|
|
|
|
add_field("RFN.TIPOREC", AN, 3, 1, true, "RFN");
|
|
|
|
|
add_field("RFN.TIPORIF", AN, 3, 4, true, "IV");
|
|
|
|
|
add_field("RFN.RIFACCADD", AN, 35, 7, true);
|
|
|
|
|
add_field("RFN.DATARIF", AN, 8, 42, true);
|
2011-04-18 13:11:46 +00:00
|
|
|
|
add_field("RFN.FINERECORD", AN, 2, 0, true, "\r\n");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
|
|
|
|
|
// Record TAX: informazioni assoggettamento iva
|
|
|
|
|
add_field("TAX.TIPOREC", AN, 3, 1, true, "TAX");
|
|
|
|
|
add_field("TAX.TIPOTASS", AN, 3, 4, true, "VAT");
|
|
|
|
|
add_field("TAX.DESCRIZ", AN, 35, 7);
|
|
|
|
|
add_field("TAX.CATIMP", AN, 3, 42, true);
|
|
|
|
|
add_field("TAX.ALIQIVA", NU, 7, 45, true);
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("TAX.IMPORTO", NS, 16, 52, true);
|
2011-04-18 13:11:46 +00:00
|
|
|
|
add_field("TAX.FINERECORD", AN, 2, 0, true, "\r\n");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
|
|
|
|
|
// Record ALD: sconti di riga
|
|
|
|
|
add_field("ALD.TIPOREC", AN, 3, 1, true, "ALD");
|
2011-04-29 14:10:53 +00:00
|
|
|
|
add_field("ALD.INDSCADD", AN, 3, 4, true, "A");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("ALD.DESCR", AN, 35, 7);
|
2011-04-29 14:10:53 +00:00
|
|
|
|
add_field("ALD.INDSEQ", AN, 3, 42);
|
|
|
|
|
add_field("ALD.TIPOSCADD", AN, 6, 45, true, "TD");
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("ALD.IMPORTO", NS, 16, 51);
|
2011-04-29 14:10:53 +00:00
|
|
|
|
add_field("ALD.PERC", AN, 7, 67, true);
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("ALD.FLGPRZUN", AN, 3, 74);
|
2011-04-18 13:11:46 +00:00
|
|
|
|
add_field("ALD.FINERECORD", AN, 2, 0, true, "\r\n");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
|
|
|
|
|
// Record NAD: identificazione punto di consegna
|
|
|
|
|
add_field("NAD.TIPOREC", AN, 3, 1, true, "NAD");
|
2011-04-29 14:10:53 +00:00
|
|
|
|
add_field("NAD.CODCONS1", NU, 2, 4, true, "00");
|
|
|
|
|
add_field("NAD.CODCONS2", AN, 4, 6);
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("NAD.QCODCONS", AN, 3, 21, true, "92");
|
|
|
|
|
add_field("NAD.RAGSOCD", AN, 70, 24, true);
|
|
|
|
|
add_field("NAD.INDIRD", AN, 70, 94, true);
|
|
|
|
|
add_field("NAD.CITTAD", AN, 35, 164, true);
|
|
|
|
|
add_field("NAD.PROVD", AN, 9, 199, true);
|
|
|
|
|
add_field("NAD.CAPD", AN, 9, 208, true);
|
|
|
|
|
add_field("NAD.NAZIOD", AN, 3, 217, true);
|
|
|
|
|
add_field("NAD.NUMBOLLA", AN, 35, 220, true);
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("NAD.DATABOLL", DA, 8, 255, true);
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("NAD.NUMORD", AN, 35, 263, true);
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("NAD.DATAORD", DA, 8, 298, true);
|
2011-04-18 13:11:46 +00:00
|
|
|
|
add_field("NAD.FINERECORD", AN, 2, 0, true, "\r\n");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
|
|
|
|
|
// *** Sezione di sommario fattura
|
|
|
|
|
|
|
|
|
|
// Record FTT: note di sommario
|
|
|
|
|
add_field("FTT.TIPOREC", AN, 3, 1, true, "FTT");
|
|
|
|
|
add_field("FTT.TIPONOTA", AN, 3, 4);
|
|
|
|
|
add_field("FTT.NOTE", AN,350, 7);
|
2011-04-18 13:11:46 +00:00
|
|
|
|
add_field("FTT.FINERECORD", AN, 2, 0, true, "\r\n");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
|
|
|
|
|
// Record ALT: sconto di sommario
|
|
|
|
|
add_field("ALT.TIPOREC", AN, 3, 1, true, "ALT");
|
2011-04-18 13:11:46 +00:00
|
|
|
|
add_field("ALT.INDSCADD", AN, 3, 4, true, "A");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("ALT.DESCR", AN, 35, 7);
|
|
|
|
|
add_field("ALT.INDSEQ", NU, 3, 42);
|
|
|
|
|
add_field("ALT.TIPOSCADD", AN, 6, 45);
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("ALT.IMPORTO", NS, 16, 51, true);
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("ALT.PERC", NU, 7, 67, true);
|
2011-04-18 13:11:46 +00:00
|
|
|
|
add_field("ALT.FINERECORD", AN, 2, 0, true, "\r\n");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
|
|
|
|
|
// Record IVA: subtotali imposte
|
|
|
|
|
add_field("IVA.TIPOREC", AN, 3, 1, true, "IVA");
|
|
|
|
|
add_field("IVA.TIPOTASS", AN, 3, 4, true, "VAT");
|
|
|
|
|
add_field("IVA.DESCRIZ", AN, 35, 7);
|
|
|
|
|
add_field("IVA.CATIMP", AN, 3, 42, true);
|
|
|
|
|
add_field("IVA.ALIQIVA", NU, 7, 45);
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("IVA.SIMPONIB", NS, 16, 52, true);
|
|
|
|
|
add_field("IVA.SIMPORTO", NS, 16, 68);
|
2011-04-18 13:11:46 +00:00
|
|
|
|
add_field("IVA.FINERECORD", AN, 2, 0, true, "\r\n");
|
2011-04-12 13:38:18 +00:00
|
|
|
|
|
|
|
|
|
// Record TMA: totali documento
|
|
|
|
|
add_field("TMA.TIPOREC", AN, 3, 1, true, "TMA");
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("TMA.TOTDOC1", NS, 16, 4, true);
|
|
|
|
|
add_field("TMA.IMPOSTA1", NS, 16, 20, true);
|
|
|
|
|
add_field("TMA.IMPONIB1", NS, 16, 36, true);
|
|
|
|
|
add_field("TMA.TOTRIGHE1", NS, 16, 52, true);
|
|
|
|
|
add_field("TMA.TOTANT1", NS, 16, 68);
|
|
|
|
|
add_field("TMA.TOTPAG1", NS, 16, 84);
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("TMA.DIVISA1", AN, 3, 100);
|
2011-04-19 13:31:56 +00:00
|
|
|
|
add_field("TMA.TOTDOC2", NS, 16, 103);
|
|
|
|
|
add_field("TMA.IMPOSTA2", NS, 16, 119);
|
|
|
|
|
add_field("TMA.IMPONIB2", NS, 16, 135);
|
|
|
|
|
add_field("TMA.TOTRIGHE2", NS, 16, 151);
|
|
|
|
|
add_field("TMA.TOTANT2", NS, 16, 167);
|
|
|
|
|
add_field("TMA.TOTPAG2", NS, 16, 183);
|
2011-04-12 13:38:18 +00:00
|
|
|
|
add_field("TMA.DIVISA2", AN, 3, 199);
|
2011-04-18 13:11:46 +00:00
|
|
|
|
add_field("TMA.FINERECORD", AN, 2, 0, true, "\r\n");
|
2011-04-05 08:16:55 +00:00
|
|
|
|
|
2011-04-13 13:26:49 +00:00
|
|
|
|
}
|
2011-04-05 08:16:55 +00:00
|
|
|
|
///////////////////////////////////////
|
|
|
|
|
// TSkeleton_application
|
|
|
|
|
///////////////////////////////////////
|
|
|
|
|
class THardy_esselunga_fat : public TSkeleton_application
|
|
|
|
|
{
|
2011-11-15 11:18:51 +00:00
|
|
|
|
TCodArtEsselunga_cache _cache_ca;
|
|
|
|
|
|
2011-04-05 08:16:55 +00:00
|
|
|
|
protected:
|
|
|
|
|
long genera_recordset(const TMask& mask, TISAM_recordset& recset);
|
|
|
|
|
void elabora(const TMask& mask);
|
|
|
|
|
void check_date(const TDate& datafine, TDate& dataini);
|
2011-04-29 14:10:53 +00:00
|
|
|
|
TString4 check_cliente(const long codcf);
|
2011-11-15 11:18:51 +00:00
|
|
|
|
|
|
|
|
|
void segnala_documento(const TDocumento& doc, TLog_report& log, const char* msg) const;
|
|
|
|
|
bool esistono_righe_esselunga(const TDocumento& doc) const;
|
2011-04-18 13:11:46 +00:00
|
|
|
|
void add_rec_testata(TFatture_recordset& fat, TDocumento& doc);
|
|
|
|
|
void add_rec_sommario(TFatture_recordset& fat, TDocumento& doc);
|
2011-04-19 13:31:56 +00:00
|
|
|
|
void add_recs_dettaglio(TFatture_recordset& fat, TDocumento& doc);
|
2011-04-05 08:16:55 +00:00
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
virtual void main_loop();
|
|
|
|
|
virtual bool create();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//metodo per ricavare la data iniziale di elaborazione qualora l'utonto non la metta e l'esercizio da usare
|
|
|
|
|
void THardy_esselunga_fat::check_date(const TDate& datafine, TDate& dataini)
|
|
|
|
|
{
|
|
|
|
|
TEsercizi_contabili esc;
|
|
|
|
|
TDate datafine_tmp = datafine;
|
|
|
|
|
const int esercizio = esc.date2esc(datafine);
|
|
|
|
|
esc.code2range(esercizio, dataini, datafine_tmp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//metodo che filtra tutti i documenti in base ai parametri della maschera
|
|
|
|
|
long THardy_esselunga_fat::genera_recordset(const TMask& mask, TISAM_recordset& recset)
|
|
|
|
|
{
|
|
|
|
|
TString query;
|
2011-04-29 14:10:53 +00:00
|
|
|
|
query << "USE DOC KEY 3\n";
|
2011-04-05 08:16:55 +00:00
|
|
|
|
|
|
|
|
|
TString filt_expr;
|
|
|
|
|
// aggiungo alla query le condizioni sulle numerazioni selezionare da maschera
|
|
|
|
|
TSheet_field& sheet = mask.sfield(F_SHEETDOC);
|
|
|
|
|
const long items = sheet.items();
|
|
|
|
|
if (items > 0)
|
|
|
|
|
{
|
|
|
|
|
TString16 codnum;
|
|
|
|
|
filt_expr << " SELECT";
|
|
|
|
|
FOR_EACH_SHEET_ROW(sheet, r, row)
|
|
|
|
|
{
|
|
|
|
|
codnum = row->get(0);
|
|
|
|
|
if (codnum.not_empty())
|
|
|
|
|
{
|
|
|
|
|
filt_expr << " (CODNUM=\"";
|
|
|
|
|
filt_expr << codnum << "\") ||";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
filt_expr.rtrim(2);
|
|
|
|
|
query << filt_expr;
|
|
|
|
|
}
|
|
|
|
|
query << "\nFROM DATADOC=#DATAINI PROVV='D' ANNO=#ANNO";
|
|
|
|
|
query << "\nTO DATADOC=#DATAFIN PROVV='D' ANNO=#ANNO";
|
|
|
|
|
|
|
|
|
|
recset.set(query);
|
|
|
|
|
|
|
|
|
|
//settaggio delle variabili
|
|
|
|
|
const TDate datafin = mask.get_date(F_DATAFIN);
|
|
|
|
|
TDate dataini = mask.get_date(F_DATAINI);
|
|
|
|
|
|
|
|
|
|
//se la data iniziale <20> vuota deve coincidere con l'inizio dell'esercizio della data finale (obbligatoria!)
|
|
|
|
|
int esc = datafin.year();
|
|
|
|
|
if (!dataini.ok())
|
|
|
|
|
check_date(datafin, dataini);
|
|
|
|
|
|
|
|
|
|
recset.set_var("#ANNO", long(esc));
|
|
|
|
|
recset.set_var("#DATAINI", dataini);
|
|
|
|
|
recset.set_var("#DATAFIN", datafin);
|
|
|
|
|
return recset.items();
|
|
|
|
|
}
|
|
|
|
|
|
2011-04-18 13:11:46 +00:00
|
|
|
|
void THardy_esselunga_fat::add_rec_testata(TFatture_recordset& fat, TDocumento& doc)
|
2011-04-13 13:26:49 +00:00
|
|
|
|
{
|
|
|
|
|
fat.new_rec("BGM");
|
2011-04-19 13:31:56 +00:00
|
|
|
|
TString16 numdoc;
|
|
|
|
|
const TString& num = doc.numerazione();
|
|
|
|
|
numdoc.format("%012d",doc.numero());
|
|
|
|
|
numdoc << cache().get("%NUM", num, "S7");
|
|
|
|
|
numdoc.strip("/");
|
|
|
|
|
numdoc = numdoc.right(12);
|
2011-04-29 14:10:53 +00:00
|
|
|
|
|
|
|
|
|
if (doc.tipo().nota_credito())
|
|
|
|
|
fat.set("BGM.TIPODOC", "NOTACC"); // nota di credito
|
|
|
|
|
else
|
|
|
|
|
fat.set("BGM.TIPODOC", "INVOIC"); // fattura
|
2011-04-19 13:31:56 +00:00
|
|
|
|
fat.set("BGM.NUMDOC", numdoc);
|
2011-04-29 14:10:53 +00:00
|
|
|
|
fat.set("BGM.DATADOC", TVariant(doc.data()));
|
2011-04-13 13:26:49 +00:00
|
|
|
|
|
|
|
|
|
fat.new_rec("NAS");
|
|
|
|
|
fat.new_rec("NAI");
|
|
|
|
|
fat.new_rec("FTX");
|
2011-04-18 13:11:46 +00:00
|
|
|
|
|
2011-04-13 13:26:49 +00:00
|
|
|
|
fat.new_rec("PAT");
|
2011-11-15 11:18:51 +00:00
|
|
|
|
const TPagamento& pag = doc.pagamento();
|
|
|
|
|
fat.set("PAT.DESCRIZ", pag.name());
|
|
|
|
|
fat.set("PAT.DATASCAD", TVariant(pag.data_rata(0)));
|
2011-05-04 09:02:29 +00:00
|
|
|
|
fat.set("PAT.IMPORTO", TVariant(doc.totale_doc()));
|
2011-11-15 11:18:51 +00:00
|
|
|
|
TString8 tp = pag.tipo_prima_rata();
|
|
|
|
|
real imp = pag.importo_rata(0);
|
2011-04-13 13:26:49 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-04-18 13:11:46 +00:00
|
|
|
|
void THardy_esselunga_fat::add_rec_sommario(TFatture_recordset& fat, TDocumento& doc)
|
2011-04-13 13:26:49 +00:00
|
|
|
|
{
|
2011-04-18 13:11:46 +00:00
|
|
|
|
TAssoc_array& tabella_iva = doc.tabella_iva();
|
|
|
|
|
TRiepilogo_iva* ri;
|
|
|
|
|
for (ri = (TRiepilogo_iva*) tabella_iva.first_item(); ri != NULL; ri = (TRiepilogo_iva*) tabella_iva.succ_item())
|
|
|
|
|
{
|
|
|
|
|
fat.new_rec("IVA");
|
|
|
|
|
fat.set("IVA.DESCRIZ", ri->cod_iva().descrizione());
|
2011-04-21 14:06:33 +00:00
|
|
|
|
const TString4& tipo = ri->cod_iva().tipo();
|
|
|
|
|
TString4 tipo_hardy = "S";
|
|
|
|
|
if (tipo == "ES")
|
|
|
|
|
tipo_hardy = "X";
|
|
|
|
|
else
|
|
|
|
|
if (tipo == "NI")
|
|
|
|
|
tipo_hardy = "G";
|
|
|
|
|
else
|
|
|
|
|
if (tipo == "NS")
|
|
|
|
|
tipo_hardy = "E";
|
|
|
|
|
fat.set("IVA.CATIMP", tipo_hardy);
|
|
|
|
|
|
2011-11-18 09:58:52 +00:00
|
|
|
|
const TString8 aliquota = real(ri->cod_iva().percentuale()*10000).string(7,0,0);
|
|
|
|
|
fat.set("IVA.ALIQIVA", aliquota);
|
2011-04-18 13:11:46 +00:00
|
|
|
|
fat.set("IVA.SIMPONIB", ri->imponibile());
|
|
|
|
|
fat.set("IVA.SIMPORTO", ri->imposta());
|
|
|
|
|
}
|
2011-04-13 13:26:49 +00:00
|
|
|
|
fat.new_rec("TMA");
|
2011-04-18 13:11:46 +00:00
|
|
|
|
fat.set("TMA.TOTDOC1", doc.totale_doc());
|
|
|
|
|
fat.set("TMA.IMPOSTA1", doc.imposta());
|
|
|
|
|
fat.set("TMA.IMPONIB1", doc.imponibile());
|
2011-04-29 14:10:53 +00:00
|
|
|
|
fat.set("TMA.TOTRIGHE1", doc.get_real("TOTMER"));
|
2011-04-18 13:11:46 +00:00
|
|
|
|
fat.set("TMA.TOTANT1", "");
|
2011-04-13 13:26:49 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-11-15 11:18:51 +00:00
|
|
|
|
bool THardy_esselunga_fat::esistono_righe_esselunga(const TDocumento& doc) const
|
|
|
|
|
{
|
|
|
|
|
FOR_EACH_PHYSICAL_RDOC((TDocumento&)doc, r, rigadoc)
|
|
|
|
|
{
|
|
|
|
|
const TString& codart = rigadoc->get(RDOC_CODART);
|
|
|
|
|
const TString& codart_esselunga = ((TCodArtEsselunga_cache&)_cache_ca).decode(codart);
|
|
|
|
|
if (codart_esselunga.full())
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2011-04-19 13:31:56 +00:00
|
|
|
|
void THardy_esselunga_fat::add_recs_dettaglio(TFatture_recordset& fat, TDocumento& doc)
|
2011-04-13 13:26:49 +00:00
|
|
|
|
{
|
2011-04-19 13:31:56 +00:00
|
|
|
|
FOR_EACH_PHYSICAL_RDOC(doc, r, rigadoc)
|
|
|
|
|
{
|
2011-11-09 14:23:49 +00:00
|
|
|
|
const TString16 codart = rigadoc->get(RDOC_CODART);
|
2011-11-15 11:18:51 +00:00
|
|
|
|
const TString& codart_esselunga = _cache_ca.decode(codart);
|
2011-11-09 14:23:49 +00:00
|
|
|
|
if (codart_esselunga.blank())
|
|
|
|
|
continue;
|
|
|
|
|
const TRectype& rec_anamag = cache().get(LF_ANAMAG, codart);
|
2011-04-19 13:31:56 +00:00
|
|
|
|
fat.new_rec("DET");
|
2011-04-21 14:06:33 +00:00
|
|
|
|
long rl(r);
|
|
|
|
|
fat.set("DET.NUMRIGA", TVariant(rl));
|
2011-04-19 13:31:56 +00:00
|
|
|
|
fat.set("DET.CODEANCU", codart_esselunga);
|
2011-04-21 14:06:33 +00:00
|
|
|
|
fat.set("DET.CODDISTU", codart_esselunga);
|
2011-04-19 13:31:56 +00:00
|
|
|
|
fat.set("DET.TIPQUANT", "L01"); // vendita (sentire da robbi)
|
|
|
|
|
fat.set("DET.QTACONS", rigadoc->quantita());
|
2011-04-21 14:06:33 +00:00
|
|
|
|
fat.set("DET.QTAFATT", rigadoc->quantita());
|
2011-04-22 09:13:03 +00:00
|
|
|
|
fat.set("DET.NRCUINTU", rec_anamag.get_real(ANAMAG_PPCONF));
|
2011-04-21 14:06:33 +00:00
|
|
|
|
fat.set("DET.PRZUNI", rigadoc->prezzo(false, true));
|
|
|
|
|
fat.set("DET.PRZUN2", rigadoc->prezzo(false, false));
|
2011-04-19 13:31:56 +00:00
|
|
|
|
fat.set("DET.IMPORTO", rigadoc->importo(false, false));
|
|
|
|
|
|
|
|
|
|
fat.new_rec("DES");
|
2011-04-21 10:36:26 +00:00
|
|
|
|
fat.set("DES.DESCR", rigadoc->get(RDOC_DESCR));
|
2011-04-19 13:31:56 +00:00
|
|
|
|
|
|
|
|
|
//fat.new_rec("RFN"); // solo per note di debito e di credito (chiedere a Robbi)
|
|
|
|
|
|
|
|
|
|
fat.new_rec("TAX");
|
2011-11-28 11:56:34 +00:00
|
|
|
|
const TString8 aliquota = real(rigadoc->iva().percentuale()*10000).string(7,0,'0');
|
2011-11-18 09:58:52 +00:00
|
|
|
|
fat.set("TAX.ALIQIVA", aliquota);
|
2011-04-21 10:36:26 +00:00
|
|
|
|
fat.set("TAX.DESCRIZ", rigadoc->iva().descrizione());
|
2011-04-19 13:31:56 +00:00
|
|
|
|
fat.set("TAX.IMPORTO", rigadoc->imposta());
|
2011-04-21 10:36:26 +00:00
|
|
|
|
const TString4& tipo = rigadoc->iva().tipo();
|
|
|
|
|
TString4 tipo_hardy = "S";
|
|
|
|
|
if (tipo == "ES")
|
|
|
|
|
tipo_hardy = "X";
|
|
|
|
|
else
|
|
|
|
|
if (tipo == "NI")
|
|
|
|
|
tipo_hardy = "G";
|
|
|
|
|
else
|
|
|
|
|
if (tipo == "NS")
|
|
|
|
|
tipo_hardy = "E";
|
|
|
|
|
fat.set("TAX.CATIMP", tipo_hardy);
|
2011-04-29 14:10:53 +00:00
|
|
|
|
// gestione sconto riga
|
2011-11-24 16:11:43 +00:00
|
|
|
|
const real sconto = rigadoc->sconto();
|
2011-04-29 14:10:53 +00:00
|
|
|
|
if (!sconto.is_zero())
|
|
|
|
|
{
|
|
|
|
|
fat.new_rec("ALD");
|
2011-11-24 16:11:43 +00:00
|
|
|
|
fat.set("ALD.IMPORTO", sconto);
|
|
|
|
|
|
|
|
|
|
TString80 str;
|
2011-11-28 11:56:34 +00:00
|
|
|
|
real quota; scontoexpr2perc(rigadoc->get(RDOC_SCONTO), false, str, quota);
|
|
|
|
|
const real perc = (UNO - quota)*1000000;
|
|
|
|
|
str = perc.string(7,0,'0');
|
2011-04-29 14:10:53 +00:00
|
|
|
|
fat.set("ALD.PERC", str);
|
|
|
|
|
}
|
2011-04-21 11:30:41 +00:00
|
|
|
|
fat.new_rec("NAD");
|
2011-04-21 14:06:33 +00:00
|
|
|
|
const long codcf = doc.codcf();
|
2011-04-29 14:10:53 +00:00
|
|
|
|
const TString4 codcf_esselunga = check_cliente(codcf);
|
2011-04-21 14:06:33 +00:00
|
|
|
|
TToken_string key;
|
|
|
|
|
key.add("C"); key.add(codcf);
|
|
|
|
|
const TRectype& rec_cli = cache().get(LF_CLIFO, key);
|
|
|
|
|
TString4 stato = rec_cli.get(CLI_STATOCF);
|
|
|
|
|
TString4 comune = rec_cli.get(CLI_COMCF);
|
|
|
|
|
key.cut(0);
|
|
|
|
|
key.add(stato); key.add(comune);
|
|
|
|
|
const TRectype& com = cache().get(LF_COMUNI, key);
|
2011-04-29 14:10:53 +00:00
|
|
|
|
fat.set("NAD.CODCONS2", codcf_esselunga);
|
2011-04-21 14:06:33 +00:00
|
|
|
|
fat.set("NAD.RAGSOCD", rec_cli.get(CLI_RAGSOC));
|
|
|
|
|
TString80 str;
|
|
|
|
|
str.cut(0);
|
|
|
|
|
str << rec_cli.get(CLI_INDCF) << ", " << rec_cli.get(CLI_CIVCF);
|
|
|
|
|
fat.set("NAD.INDIRD", str);
|
|
|
|
|
fat.set("NAD.CITTAD", com.get(COM_DENCOM));
|
|
|
|
|
fat.set("NAD.PROVD", com.get(COM_DENCOM));
|
|
|
|
|
fat.set("NAD.CAPD", rec_cli.get(CLI_CAPCF));
|
|
|
|
|
if (stato.empty())
|
|
|
|
|
stato = "IT";
|
|
|
|
|
fat.set("NAD.NAZIOD", stato);
|
2011-04-22 09:13:03 +00:00
|
|
|
|
TString16 numdoc;
|
|
|
|
|
const TString& num = doc.numerazione();
|
|
|
|
|
numdoc.format("%012d",doc.numero());
|
|
|
|
|
numdoc << cache().get("%NUM", num, "S7");
|
|
|
|
|
numdoc.strip("/");
|
|
|
|
|
numdoc = numdoc.right(12);
|
|
|
|
|
fat.set("NAD.NUMDOC", numdoc);
|
2011-04-29 14:10:53 +00:00
|
|
|
|
fat.set("NAD.DATADOC", TVariant(doc.data()));
|
|
|
|
|
fat.set("NAD.NUMBOLLA", numdoc);
|
|
|
|
|
fat.set("NAD.DATABOLL", TVariant(doc.data()));
|
2011-04-19 13:31:56 +00:00
|
|
|
|
}
|
2011-04-13 13:26:49 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-11-15 11:18:51 +00:00
|
|
|
|
void THardy_esselunga_fat::segnala_documento(const TDocumento& doc, TLog_report& log, const char* msg) const
|
|
|
|
|
{
|
|
|
|
|
TString s;
|
|
|
|
|
s << TR("Doc. ") << doc.get(DOC_CODNUM) << ' '
|
|
|
|
|
<< doc.get(DOC_ANNO) << '/' << doc.get(DOC_NDOC) << " : ";
|
|
|
|
|
|
|
|
|
|
if (msg && *msg)
|
|
|
|
|
{
|
|
|
|
|
s << msg;
|
|
|
|
|
log.log(1, s);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
s << TR("Elaborato con successo");
|
|
|
|
|
log.log(0, s);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2011-04-05 08:16:55 +00:00
|
|
|
|
void THardy_esselunga_fat::elabora(const TMask& mask)
|
|
|
|
|
{
|
|
|
|
|
TLog_report log;
|
2011-04-12 13:38:18 +00:00
|
|
|
|
TConfig config(CONFIG_DITTA, "ha");
|
|
|
|
|
TFilename file_fatture = config.get("Esselunga_Path");
|
|
|
|
|
file_fatture.add("FATTURE");
|
|
|
|
|
file_fatture.ext("txt");
|
2011-04-05 08:16:55 +00:00
|
|
|
|
TISAM_recordset recset("");
|
|
|
|
|
const long items = genera_recordset(mask, recset);
|
|
|
|
|
if (items == 0)
|
2011-11-15 11:18:51 +00:00
|
|
|
|
log.log(1, "Non esistono documenti che soddisfino i parametri selezionati.");
|
2011-04-05 08:16:55 +00:00
|
|
|
|
// lettura dei documenti da recordset
|
2011-11-15 11:18:51 +00:00
|
|
|
|
TProgind pi(recset.items(), TR("Elaborazione documenti in corso..."));
|
2011-04-12 13:38:18 +00:00
|
|
|
|
TFatture_recordset fatture;
|
2011-04-05 08:16:55 +00:00
|
|
|
|
TCodArtEsselunga_cache cache_ca;
|
2011-04-18 13:11:46 +00:00
|
|
|
|
const bool definitivo = mask.get_bool(F_DEFINITIVO);
|
2011-11-15 11:18:51 +00:00
|
|
|
|
const bool forzatura = mask.get_bool(F_FORZATURA);
|
2011-04-05 08:16:55 +00:00
|
|
|
|
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
2011-04-12 13:38:18 +00:00
|
|
|
|
{
|
2011-04-05 08:16:55 +00:00
|
|
|
|
if (!pi.addstatus(1))
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
const long codcf = recset.get(DOC_CODCF).as_int();
|
2011-11-15 11:18:51 +00:00
|
|
|
|
// verificare se il cliente ha tutti i parametri per poter essere inviato (invio e codice cliente per Hardy)
|
2011-04-29 14:10:53 +00:00
|
|
|
|
const TString4 codcf_esselunga = check_cliente(codcf);
|
2011-11-15 11:18:51 +00:00
|
|
|
|
if (codcf_esselunga.full())
|
2011-04-05 08:16:55 +00:00
|
|
|
|
{
|
2011-11-15 11:18:51 +00:00
|
|
|
|
TDocumento doc(recset.cursor()->curr());
|
|
|
|
|
if (doc.get_bool("HA_FATTURE") && !forzatura)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
if (esistono_righe_esselunga(doc))
|
|
|
|
|
{
|
|
|
|
|
add_rec_testata(fatture, doc);
|
|
|
|
|
add_recs_dettaglio(fatture, doc);
|
|
|
|
|
add_rec_sommario(fatture, doc);
|
|
|
|
|
if (definitivo)
|
|
|
|
|
{
|
|
|
|
|
doc.put("HA_FATTURE", "X");
|
|
|
|
|
doc.rewrite();
|
|
|
|
|
}
|
|
|
|
|
segnala_documento(doc, log, NULL);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
segnala_documento(doc, log, "Non contiene righe valide per Esselunga");
|
2011-04-05 08:16:55 +00:00
|
|
|
|
} // if check_cliente...
|
|
|
|
|
} //for (bool ok = recset.move_first()...
|
|
|
|
|
|
2011-04-12 13:38:18 +00:00
|
|
|
|
fatture.save_as(file_fatture, fmt_text);
|
2011-11-15 11:18:51 +00:00
|
|
|
|
log.preview();
|
2011-04-05 08:16:55 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-04-29 14:10:53 +00:00
|
|
|
|
TString4 THardy_esselunga_fat::check_cliente(const long codcf)
|
2011-04-05 08:16:55 +00:00
|
|
|
|
{
|
2011-11-15 11:18:51 +00:00
|
|
|
|
TString4 codcf_hardy;
|
|
|
|
|
TString8 key; key << codcf;
|
|
|
|
|
const TRectype& rec_cliente = cache().get("&CEL", key);
|
2011-04-05 08:16:55 +00:00
|
|
|
|
const bool invio = rec_cliente.get_bool("B0");
|
2011-04-29 14:10:53 +00:00
|
|
|
|
const char dipendenza = rec_cliente.get("S1")[0];
|
2011-04-05 08:16:55 +00:00
|
|
|
|
if (invio)
|
2011-04-29 14:10:53 +00:00
|
|
|
|
{
|
|
|
|
|
codcf_hardy << dipendenza;
|
|
|
|
|
codcf_hardy << format("%03d", rec_cliente.get_long("I0"));
|
|
|
|
|
}
|
2011-04-05 08:16:55 +00:00
|
|
|
|
return codcf_hardy;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void THardy_esselunga_fat::main_loop()
|
|
|
|
|
{
|
|
|
|
|
THardy_esselunga_fat_mask mask;
|
|
|
|
|
while (mask.run() == K_ENTER)
|
|
|
|
|
elabora(mask);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool THardy_esselunga_fat::create()
|
|
|
|
|
{
|
|
|
|
|
open_files(LF_DOC, LF_RIGHEDOC, 0);
|
|
|
|
|
return TSkeleton_application::create();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ha2200 (int argc, char* argv[])
|
|
|
|
|
{
|
|
|
|
|
THardy_esselunga_fat elabapp;
|
2011-11-15 11:18:51 +00:00
|
|
|
|
elabapp.run(argc, argv, TR("Esselunga: generazione file Fatture"));
|
2011-04-12 13:38:18 +00:00
|
|
|
|
return 0;
|
2011-04-05 08:16:55 +00:00
|
|
|
|
}
|