Patch level : 10.0

Files correlati     : ha0.exe ha0200a.msk ha2.exe ha2200a.msk
Ricompilazione Demo : [ ]
Commento            :


git-svn-id: svn://10.65.10.50/branches/R_10_00@22490 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2011-11-15 11:18:51 +00:00
parent ce559da866
commit 2d49557540
7 changed files with 101 additions and 82 deletions

View File

@ -68,6 +68,7 @@
#define F_E_COD_ESSELUNGA 305
#define F_E_TIPOEMISSIONE 306
#define F_E_DATACONF 307
#define F_E_PRIVATPATH 308
//==============================
//pagina 4

View File

@ -560,7 +560,7 @@ PAGE "Configurazione Esselunga" 0 2 0 0
STRING F_E_PATH 255 39
BEGIN
PROMPT 2 2 "Percorso files da spedire "
PROMPT 2 2 "Percorso file FATTURE da spedire "
DSELECT
FLAGS "M"
CHECKTYPE REQUIRED
@ -568,6 +568,17 @@ BEGIN
FIELD Esselunga_Path
END
STRING F_E_PRIVATPATH 255 39
BEGIN
PROMPT 2 3 "Percorso file PRIVAT da spedire "
DSELECT
FLAGS "M"
CHECKTYPE REQUIRED
WARNING "Selezionare una cartella valida!"
FIELD Esselunga_PrivatPath
END
STRING F_E_PIVA_HARDY 12
BEGIN
PROMPT 2 4 "Partita IVA Hardy "

View File

@ -225,25 +225,6 @@ long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recs
TConfig config(CONFIG_DITTA, "ha");
const TString4 tipo_doc_to_elab = config.get("TipoFatt");
/*
//e adesso cerca le numerazioni che contengono il tipo preso dalla configurazione
TString_array num_doc;
const int numerazioni_valide = find_numerazioni(tipo_doc_to_elab, num_doc);
if (numerazioni_valide > 0)
{
query << "&&(";
for (int i = 0; i < numerazioni_valide; i++)
{
if (i > 0)
query << "||";
query << "(CODNUM='" << num_doc[i] << "')";
}
query << ")";
}
*/
// Inutile testare tutte le numerazioni, basta il tipo documento
query << "&&(" << DOC_TIPODOC << "=='" << tipo_doc_to_elab << "')";

View File

@ -140,9 +140,10 @@ long THardy_esselunga::genera_recordset(const TMask& mask, TISAM_recordset& recs
TFilename THardy_esselunga::scrivi_testata(const TMask& mask)
{
const TString4 dipendenza = mask.get(F_DIPENDENZA);
TConfig config(CONFIG_DITTA, "ha");
TFilename file_privat = config.get("Esselunga_Path");
TFilename file_privat = config.get("Esselunga_PrivatPath");
const TString& dipendenza = mask.get(F_DIPENDENZA);
if (dipendenza[0] == 'D')
file_privat.add("CDMI");
else
@ -192,15 +193,15 @@ void THardy_esselunga::elabora(const TMask& mask)
const long codcf_esselunga = check_cliente(codcf, dipendenza);
if ( codcf_esselunga > 0)
{
TDocumento* doc = new TDocumento(recset.cursor()->curr());
TDocumento doc(recset.cursor()->curr());
// passo tutte le righe del documento all'AS400recordset
TString16 numdoc;
const TString& num = doc->numerazione();
numdoc.format("%012d",doc->numero());
const TString& num = doc.numerazione();
numdoc.format("%012d",doc.numero());
numdoc << cache().get("%NUM", num, "S7");
numdoc.strip("/");
numdoc = numdoc.right(12);
FOR_EACH_PHYSICAL_RDOC(*doc, r, rigadoc)
FOR_EACH_PHYSICAL_RDOC(doc, r, rigadoc)
{
const TString& codart = rigadoc->get(RDOC_CODART);
const TString& codart_esselunga = cache_ca.decode(codart);

View File

@ -22,8 +22,6 @@
#include "ha2.h"
#include "ha2200a.h"
const char* const APPNAME = TR("Esselunga: generazione file Fatture");
///////////////////////////////////////////////////////////
// TAutomask
///////////////////////////////////////////////////////////
@ -280,7 +278,7 @@ TFatture_recordset::TFatture_recordset()
add_field("DET.TIPOREC", AN, 3, 1, true, "DET");
add_field("DET.NUMRIGA", NU, 6, 4, true);
add_field("DET.IDSOTTOR", AN, 3, 10);
add_field("DET.NUMSRIGA", AN, 6, 13); // AN perche'e' un campo che non c'e' mai e non deve essere zerofilled
add_field("DET.NUMSRIGA", AN, 6, 13); // AN perche' e' un campo che non c'e' mai e non deve essere zerofilled
add_field("DET.CODEANCU", AN, 35, 19, true);
add_field("DET.TIPCODCU", AN, 3, 54, true, "EN");
add_field("DET.CODEANTU", AN, 35, 57);
@ -406,11 +404,16 @@ TFatture_recordset::TFatture_recordset()
///////////////////////////////////////
class THardy_esselunga_fat : public TSkeleton_application
{
TCodArtEsselunga_cache _cache_ca;
protected:
long genera_recordset(const TMask& mask, TISAM_recordset& recset);
void elabora(const TMask& mask);
void check_date(const TDate& datafine, TDate& dataini);
TString4 check_cliente(const long codcf);
void segnala_documento(const TDocumento& doc, TLog_report& log, const char* msg) const;
bool esistono_righe_esselunga(const TDocumento& doc) const;
void add_rec_testata(TFatture_recordset& fat, TDocumento& doc);
void add_rec_sommario(TFatture_recordset& fat, TDocumento& doc);
void add_recs_dettaglio(TFatture_recordset& fat, TDocumento& doc);
@ -497,11 +500,12 @@ void THardy_esselunga_fat::add_rec_testata(TFatture_recordset& fat, TDocumento&
fat.new_rec("FTX");
fat.new_rec("PAT");
fat.set("PAT.DESCRIZ", doc.pagamento().name());
fat.set("PAT.DATASCAD", TVariant(doc.pagamento().data_rata(0)));
const TPagamento& pag = doc.pagamento();
fat.set("PAT.DESCRIZ", pag.name());
fat.set("PAT.DATASCAD", TVariant(pag.data_rata(0)));
fat.set("PAT.IMPORTO", TVariant(doc.totale_doc()));
TString8 tp = doc.pagamento().tipo_prima_rata();
real imp = doc.pagamento().importo_rata(0);
TString8 tp = pag.tipo_prima_rata();
real imp = pag.importo_rata(0);
}
void THardy_esselunga_fat::add_rec_sommario(TFatture_recordset& fat, TDocumento& doc)
@ -549,13 +553,24 @@ void THardy_esselunga_fat::add_rec_sommario(TFatture_recordset& fat, TDocumento&
fat.set("TMA.TOTANT1", "");
}
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;
}
void THardy_esselunga_fat::add_recs_dettaglio(TFatture_recordset& fat, TDocumento& doc)
{
TCodArtEsselunga_cache cache_ca;
FOR_EACH_PHYSICAL_RDOC(doc, r, rigadoc)
{
const TString16 codart = rigadoc->get(RDOC_CODART);
const TString& codart_esselunga = cache_ca.decode(codart);
const TString& codart_esselunga = _cache_ca.decode(codart);
if (codart_esselunga.blank())
continue;
const TRectype& rec_anamag = cache().get(LF_ANAMAG, codart);
@ -577,7 +592,6 @@ void THardy_esselunga_fat::add_recs_dettaglio(TFatture_recordset& fat, TDocument
//fat.new_rec("RFN"); // solo per note di debito e di credito (chiedere a Robbi)
fat.new_rec("TAX");
fat.set("TAX.ALIQIVA", rigadoc->iva().percentuale());
fat.set("TAX.DESCRIZ", rigadoc->iva().descrizione());
@ -638,6 +652,25 @@ void THardy_esselunga_fat::add_recs_dettaglio(TFatture_recordset& fat, TDocument
}
}
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);
}
}
void THardy_esselunga_fat::elabora(const TMask& mask)
{
TLog_report log;
@ -648,41 +681,53 @@ void THardy_esselunga_fat::elabora(const TMask& mask)
TISAM_recordset recset("");
const long items = genera_recordset(mask, recset);
if (items == 0)
log.log(1, "Non esistono documenti che soddisfano i parametri selezionati.");
log.log(1, "Non esistono documenti che soddisfino i parametri selezionati.");
// lettura dei documenti da recordset
TProgind pi(recset.items(), TR("Elaborazione documenti in corso..."), true, true);
TProgind pi(recset.items(), TR("Elaborazione documenti in corso..."));
TFatture_recordset fatture;
TCodArtEsselunga_cache cache_ca;
const bool definitivo = mask.get_bool(F_DEFINITIVO);
const bool forzatura = mask.get_bool(F_FORZATURA);
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{
if (!pi.addstatus(1))
break;
const long codcf = recset.get(DOC_CODCF).as_int();
// verificare se il cliente ha tutti i parametri per poter essere inviato (invio e codice cliente per hardy)
// verificare se il cliente ha tutti i parametri per poter essere inviato (invio e codice cliente per Hardy)
const TString4 codcf_esselunga = check_cliente(codcf);
if (codcf_esselunga.not_empty())
if (codcf_esselunga.full())
{
TDocumento* doc = new TDocumento(recset.cursor()->curr());
add_rec_testata(fatture, *doc);
add_recs_dettaglio(fatture, *doc);
add_rec_sommario(fatture, *doc);
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.put("HA_FATTURE", "X");
doc.rewrite();
}
segnala_documento(doc, log, NULL);
}
else
segnala_documento(doc, log, "Non contiene righe valide per Esselunga");
} // if check_cliente...
} //for (bool ok = recset.move_first()...
fatture.save_as(file_fatture, fmt_text);
log.print_or_preview();
log.preview();
}
TString4 THardy_esselunga_fat::check_cliente(const long codcf)
{
TString4 codcf_hardy = "";
TString key;
key.format("%ld", codcf);
const TRectype rec_cliente = cache().get("&CEL", key);
TString4 codcf_hardy;
TString8 key; key << codcf;
const TRectype& rec_cliente = cache().get("&CEL", key);
const bool invio = rec_cliente.get_bool("B0");
const char dipendenza = rec_cliente.get("S1")[0];
if (invio)
@ -709,6 +754,6 @@ bool THardy_esselunga_fat::create()
int ha2200 (int argc, char* argv[])
{
THardy_esselunga_fat elabapp;
elabapp.run(argc, argv, APPNAME);
elabapp.run(argc, argv, TR("Esselunga: generazione file Fatture"));
return 0;
}

View File

@ -4,6 +4,7 @@
#define F_DATAFIN 204
#define F_DEFINITIVO 205
#define F_SHEETDOC 206
#define F_FORZATURA 207
// campi dello sheet
#define F_S_CODNUM 101
#define F_S_DESNUM 102

View File

@ -16,41 +16,15 @@ ENDPAGE
PAGE "Esselunga: generazione file Fatture" -1 -1 78 18
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 0 "@bDitta"
END
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 1 "Codice "
FLAGS "GDF"
USE LF_NDITTE
INPUT CODDITTA F_CODDITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
END
STRING F_RAGSOC 50
BEGIN
PROMPT 17 1 "Rag.Soc. "
FLAGS "D"
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 3 "@bParametri"
END
DATE F_DATAINI
BEGIN
PROMPT 2 4 "Documenti dal "
PROMPT 1 0 "Data iniziale "
HELP "Data di inizio per trasferimento documenti"
END
DATE F_DATAFIN
BEGIN
PROMPT 30 4 "al "
PROMPT 1 1 "Data finale "
HELP "Data di fine per trasferimento documenti"
CHECKTYPE REQUIRED
VALIDATE DATE_CMP_FUNC >= F_DATAINI
@ -60,12 +34,17 @@ END
BOOLEAN F_DEFINITIVO
BEGIN
PROMPT 2 6 "Trasferimento definitivo"
PROMPT 35 0 "Trasferimento definitivo"
END
BOOLEAN F_FORZATURA
BEGIN
PROMPT 35 1 "Includere documenti già trasferiti"
END
SPREADSHEET F_SHEETDOC 78
BEGIN
PROMPT 1 7 "Scelta documenti"
PROMPT 1 2 "Scelta documenti"
ITEM "Cod. num."
ITEM "Descrizione num.@50"
END