Patch level : 10.0
Files correlati : ha0.exe ha0200a.msk Ricompilazione Demo : [ ] Commento : Aggiunto nuovo tipo documento fatture in configurazione per generazione NAC Ottimizzata ricerca contratti in generazione NAC (60x) git-svn-id: svn://10.65.10.50/branches/R_10_00@22549 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
30d8384b9c
commit
25b82be4b9
@ -27,6 +27,11 @@
|
||||
#define F_NA_RIFA_TIP 232
|
||||
#define F_NA_RIFA_SPE 233
|
||||
|
||||
// Aggiunte il 17/01/2012
|
||||
#define F_CODTIPO_FAT2 241
|
||||
#define F_DESCRTIPO_FAT2 242
|
||||
|
||||
|
||||
//==============================
|
||||
//pagina 2
|
||||
//esportazione dati
|
||||
|
@ -7,14 +7,14 @@ ENDPAGE
|
||||
//----------------------------
|
||||
PAGE "Contratti e NAC" 0 2 0 0
|
||||
|
||||
GROUPBOX DLG_NULL 76 4
|
||||
GROUPBOX DLG_NULL 76 5
|
||||
BEGIN
|
||||
PROMPT 1 1 "@bTipo documento per fatture"
|
||||
PROMPT 1 1 "@bTipi documento per fatture"
|
||||
END
|
||||
|
||||
STRING F_CODTIPO_FAT 4
|
||||
BEGIN
|
||||
PROMPT 2 2 "Tipo "
|
||||
PROMPT 2 2 "Immediate "
|
||||
USE %TIP
|
||||
INPUT CODTAB F_CODTIPO_FAT
|
||||
DISPLAY "Codice" CODTAB
|
||||
@ -28,7 +28,7 @@ END
|
||||
|
||||
STRING F_DESCRTIPO_FAT 50
|
||||
BEGIN
|
||||
PROMPT 15 2 ""
|
||||
PROMPT 20 2 ""
|
||||
USE %TIP KEY 2
|
||||
INPUT S0 F_DESCRTIPO_FAT
|
||||
DISPLAY "Descrizione@60" S0
|
||||
@ -37,9 +37,33 @@ BEGIN
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_CODTIPO_FAT2 4
|
||||
BEGIN
|
||||
PROMPT 2 3 "Differite "
|
||||
COPY USE F_CODTIPO_FAT
|
||||
INPUT CODTAB F_CODTIPO_FAT2
|
||||
COPY DISPLAY F_CODTIPO_FAT
|
||||
OUTPUT F_CODTIPO_FAT2 CODTAB
|
||||
OUTPUT F_DESCRTIPO_FAT2 S0
|
||||
CHECKTYPE REQUIRED
|
||||
FLAGS "U"
|
||||
FIELD TipoFatt2
|
||||
END
|
||||
|
||||
STRING F_DESCRTIPO_FAT2 50
|
||||
BEGIN
|
||||
PROMPT 20 3 ""
|
||||
COPY USE F_DESCRTIPO_FAT
|
||||
INPUT S0 F_DESCRTIPO_FAT2
|
||||
COPY DISPLAY F_DESCRTIPO_FAT
|
||||
COPY OUTPUT F_CODTIPO_FAT2
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
|
||||
STRING F_STATO_INI_FAT 1
|
||||
BEGIN
|
||||
PROMPT 2 3 "Stato iniziale "
|
||||
PROMPT 2 4 "Stato iniziale "
|
||||
USE %STD
|
||||
INPUT CODTAB F_STATO_INI_FAT
|
||||
DISPLAY "Codice" CODTAB
|
||||
@ -52,7 +76,7 @@ END
|
||||
|
||||
STRING F_STATO_FIN_FAT 1
|
||||
BEGIN
|
||||
PROMPT 25 3 "Stato finale "
|
||||
PROMPT 25 4 "Stato finale "
|
||||
USE %STD
|
||||
INPUT CODTAB F_STATO_FIN_FAT
|
||||
DISPLAY "Codice" CODTAB
|
||||
@ -67,17 +91,17 @@ END
|
||||
|
||||
GROUPBOX DLG_NULL 76 4
|
||||
BEGIN
|
||||
PROMPT 1 5 "@bAnticipi"
|
||||
PROMPT 1 7 "@bAnticipi"
|
||||
END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 2 6 "@bContratti premi"
|
||||
PROMPT 2 8 "@bContratti premi"
|
||||
END
|
||||
|
||||
STRING F_CO_ANT_NUM 4
|
||||
BEGIN
|
||||
PROMPT 20 6 "Num. "
|
||||
PROMPT 20 8 "Num. "
|
||||
USE %NUM
|
||||
INPUT CODTAB F_CO_ANT_NUM
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -89,7 +113,7 @@ END
|
||||
|
||||
STRING F_CO_ANT_TIP 4
|
||||
BEGIN
|
||||
PROMPT 33 6 "Tipo "
|
||||
PROMPT 33 8 "Tipo "
|
||||
USE %TIP
|
||||
INPUT CODTAB F_CO_ANT_TIP
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -101,7 +125,7 @@ END
|
||||
|
||||
STRING F_CO_ANT_SPE 8
|
||||
BEGIN
|
||||
PROMPT 49 6 "Spesa riga ant. "
|
||||
PROMPT 49 8 "Spesa riga ant. "
|
||||
USE SPP
|
||||
INPUT CODTAB F_CO_ANT_SPE
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -113,12 +137,12 @@ END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 2 7 "@bNote di Accredito"
|
||||
PROMPT 2 9 "@bNote di Accredito"
|
||||
END
|
||||
|
||||
STRING F_NA_ANT_NUM 4
|
||||
BEGIN
|
||||
PROMPT 20 7 "Num. "
|
||||
PROMPT 20 9 "Num. "
|
||||
USE %NUM
|
||||
INPUT CODTAB F_NA_ANT_NUM
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -130,7 +154,7 @@ END
|
||||
|
||||
STRING F_NA_ANT_TIP 4
|
||||
BEGIN
|
||||
PROMPT 33 7 "Tipo "
|
||||
PROMPT 33 9 "Tipo "
|
||||
USE %TIP
|
||||
INPUT CODTAB F_NA_ANT_TIP
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -142,7 +166,7 @@ END
|
||||
|
||||
STRING F_NA_ANT_SPE 8
|
||||
BEGIN
|
||||
PROMPT 49 7 "Spesa riga "
|
||||
PROMPT 49 9 "Spesa riga "
|
||||
USE SPP
|
||||
INPUT CODTAB F_NA_ANT_SPE
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -152,22 +176,21 @@ BEGIN
|
||||
FIELD NaAntSpe
|
||||
END
|
||||
|
||||
|
||||
//--Posticipi-------------
|
||||
|
||||
GROUPBOX DLG_NULL 76 4
|
||||
BEGIN
|
||||
PROMPT 1 9 "@bPosticipi"
|
||||
PROMPT 1 11 "@bPosticipi"
|
||||
END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 2 10 "@bContratti premi"
|
||||
PROMPT 2 12 "@bContratti premi"
|
||||
END
|
||||
|
||||
STRING F_CO_POST_NUM 4
|
||||
BEGIN
|
||||
PROMPT 20 10 "Num. "
|
||||
PROMPT 20 12 "Num. "
|
||||
USE %NUM
|
||||
INPUT CODTAB F_CO_POST_NUM
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -179,7 +202,7 @@ END
|
||||
|
||||
STRING F_CO_POST_TIP 4
|
||||
BEGIN
|
||||
PROMPT 33 10 "Tipo "
|
||||
PROMPT 33 12 "Tipo "
|
||||
USE %TIP
|
||||
INPUT CODTAB F_CO_POST_TIP
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -191,12 +214,12 @@ END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 2 11 "@bNote di Accredito"
|
||||
PROMPT 2 13 "@bNote di Accredito"
|
||||
END
|
||||
|
||||
STRING F_NA_POST_NUM 4
|
||||
BEGIN
|
||||
PROMPT 20 11 "Num. "
|
||||
PROMPT 20 13 "Num. "
|
||||
USE %NUM
|
||||
INPUT CODTAB F_NA_POST_NUM
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -208,7 +231,7 @@ END
|
||||
|
||||
STRING F_NA_POST_TIP 4
|
||||
BEGIN
|
||||
PROMPT 33 11 "Tipo "
|
||||
PROMPT 33 13 "Tipo "
|
||||
USE %TIP
|
||||
INPUT CODTAB F_NA_POST_TIP
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -220,7 +243,7 @@ END
|
||||
|
||||
STRING F_NA_POST_SPE 8
|
||||
BEGIN
|
||||
PROMPT 49 11 "Spesa riga "
|
||||
PROMPT 49 13 "Spesa riga "
|
||||
USE SPP
|
||||
INPUT CODTAB F_NA_POST_SPE
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -234,17 +257,17 @@ END
|
||||
|
||||
GROUPBOX DLG_NULL 76 4
|
||||
BEGIN
|
||||
PROMPT 1 13 "@bRifatturazione"
|
||||
PROMPT 1 16 "@bRifatturazione"
|
||||
END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 2 14 "@bContratti premi"
|
||||
PROMPT 2 17 "@bContratti premi"
|
||||
END
|
||||
|
||||
STRING F_CO_RIFA_NUM 4
|
||||
BEGIN
|
||||
PROMPT 20 14 "Num. "
|
||||
PROMPT 20 17 "Num. "
|
||||
USE %NUM
|
||||
INPUT CODTAB F_CO_RIFA_NUM
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -256,7 +279,7 @@ END
|
||||
|
||||
STRING F_CO_RIFA_TIP 4
|
||||
BEGIN
|
||||
PROMPT 33 14 "Tipo "
|
||||
PROMPT 33 17 "Tipo "
|
||||
USE %TIP
|
||||
INPUT CODTAB F_CO_RIFA_TIP
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -268,7 +291,7 @@ END
|
||||
|
||||
STRING F_CO_RIFA_SPE 8
|
||||
BEGIN
|
||||
PROMPT 49 14 "Spesa riga ant. "
|
||||
PROMPT 49 17 "Spesa riga ant. "
|
||||
USE SPP
|
||||
INPUT CODTAB F_CO_RIFA_SPE
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -280,12 +303,12 @@ END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 2 15 "@bNote di Accredito"
|
||||
PROMPT 2 18 "@bNote di Accredito"
|
||||
END
|
||||
|
||||
STRING F_NA_RIFA_NUM 4
|
||||
BEGIN
|
||||
PROMPT 20 15 "Num. "
|
||||
PROMPT 20 18 "Num. "
|
||||
USE %NUM
|
||||
INPUT CODTAB F_NA_RIFA_NUM
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -297,7 +320,7 @@ END
|
||||
|
||||
STRING F_NA_RIFA_TIP 4
|
||||
BEGIN
|
||||
PROMPT 33 15 "Tipo "
|
||||
PROMPT 33 18 "Tipo "
|
||||
USE %TIP
|
||||
INPUT CODTAB F_NA_RIFA_TIP
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -309,7 +332,7 @@ END
|
||||
|
||||
STRING F_NA_RIFA_SPE 8
|
||||
BEGIN
|
||||
PROMPT 49 15 "Spesa riga "
|
||||
PROMPT 49 18 "Spesa riga "
|
||||
USE SPP
|
||||
INPUT CODTAB F_NA_RIFA_SPE
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
|
121
ha/ha0500.cpp
121
ha/ha0500.cpp
@ -45,7 +45,7 @@ bool THardy_elab_docs_mask::on_field_event(TOperable_field& o, TField_event e, l
|
||||
{
|
||||
const int dadata_esc = esc.date2esc(dadata);
|
||||
if (adata_esc != dadata_esc)
|
||||
return error_box("Le date devono appartenere allo stesso esercizio!");
|
||||
return error_box(TR("Le date devono appartenere allo stesso esercizio!"));
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -223,10 +223,11 @@ long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recs
|
||||
|
||||
//in base al tipo documento che si deve elaborare (settato in configurazione), ci possono essere più numerazioni da considerare!
|
||||
TConfig config(CONFIG_DITTA, "ha");
|
||||
const TString4 tipo_doc_to_elab = config.get("TipoFatt");
|
||||
const TString4 tipo_doc_to_elab1 = config.get("TipoFatt");
|
||||
const TString4 tipo_doc_to_elab2 = config.get("TipoFatt2");
|
||||
|
||||
// Inutile testare tutte le numerazioni, basta il tipo documento
|
||||
query << "&&(" << DOC_TIPODOC << "=='" << tipo_doc_to_elab << "')";
|
||||
query << "&&((" << DOC_TIPODOC << "=='" << tipo_doc_to_elab1 << "')||(" << DOC_TIPODOC << "=='" << tipo_doc_to_elab2 << "'))";
|
||||
|
||||
//se c'è l'agente specificato...
|
||||
const TString& agente = mask.get(F_CODAGE);
|
||||
@ -291,79 +292,87 @@ long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recs
|
||||
int THardy_elab_docs::find_contratti_cliente(const long codcfatt, const TMask& mask, TArray& contratti_cliente)
|
||||
{
|
||||
contratti_cliente.destroy();
|
||||
//deve cercare tutti i contratti del cliente e metterli nell'array
|
||||
TString query;
|
||||
query << "USE DOC KEY 4";
|
||||
query << "\nSELECT ((TIPODOC=#A_TIPODOC)||(TIPODOC=#R_TIPODOC)||(TIPODOC=#P_TIPODOC))&&(STR(DOC2=#CODCF))";
|
||||
query << "\nFROM TIPOCF=C";
|
||||
query << "\nTO TIPOCF=C";
|
||||
|
||||
TISAM_recordset recset(query);
|
||||
|
||||
//settaggio delle variabili
|
||||
//il codice numerazione lo trova nella configurazione Hardy, e lo deve scegliere in base alla tipologia di contratti che sta esaminando!
|
||||
TConfig config(CONFIG_DITTA, "ha");
|
||||
|
||||
const TString& tip_ant = config.get("CoAntTip");
|
||||
const TString& tip_rifa = config.get("CoRifaTip");
|
||||
const TString& tip_post = config.get("CoPostTip");
|
||||
const TString4 tip_ant = config.get("CoAntTip");
|
||||
const TString4 tip_rifa = config.get("CoRifaTip");
|
||||
const TString4 tip_post = config.get("CoPostTip");
|
||||
|
||||
recset.set_var("#A_TIPODOC", tip_ant);
|
||||
recset.set_var("#R_TIPODOC", tip_rifa);
|
||||
recset.set_var("#P_TIPODOC", tip_post);
|
||||
TAssoc_array cod_num_cont;
|
||||
cod_num_cont.add(config.get("CoAntNum"));
|
||||
cod_num_cont.add(config.get("CoRifaNum"));
|
||||
cod_num_cont.add(config.get("CoPostNum"));
|
||||
|
||||
FOR_EACH_ASSOC_OBJECT(cod_num_cont, h, k, o)
|
||||
{
|
||||
//deve cercare tutti i contratti del cliente e metterli nell'array
|
||||
TString query;
|
||||
query << "USE DOC KEY 5";
|
||||
query << "\nSELECT ((TIPODOC=#A_TIPODOC)||(TIPODOC=#R_TIPODOC)||(TIPODOC=#P_TIPODOC))&&(STR(DOC2=#CODCF))";
|
||||
query << "\nFROM PROVV=D CODNUM=" << k;
|
||||
query << "\nTO PROVV=D CODNUM=" << k;
|
||||
|
||||
TISAM_recordset recset(query);
|
||||
|
||||
recset.set_var("#A_TIPODOC", tip_ant);
|
||||
recset.set_var("#R_TIPODOC", tip_rifa);
|
||||
recset.set_var("#P_TIPODOC", tip_post);
|
||||
|
||||
recset.set_var("#CODCF", codcfatt);
|
||||
recset.set_var("#CODCF", codcfatt);
|
||||
|
||||
const long n_contratti = recset.items(); //questo serve solo al sagace programmatore
|
||||
const long n_contratti = recset.items(); //questo serve solo al sagace programmatore
|
||||
|
||||
//aggiunge i contratti all'array: solo quelli in auge nel periodo di calcolo selezionato sulla maschera!
|
||||
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
||||
{
|
||||
//contratti anticipo 'A': datainizio esiste sempre, datafine non esiste (va ad esaurimento)
|
||||
//contratti posticipo 'P': datainizio esiste sempre, datafine può non esistere
|
||||
//contratti rifatturazione 'R': come contratti anticipo
|
||||
//aggiunge i contratti all'array: solo quelli in auge nel periodo di calcolo selezionato sulla maschera!
|
||||
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
||||
{
|
||||
//contratti anticipo 'A': datainizio esiste sempre, datafine non esiste (va ad esaurimento)
|
||||
//contratti posticipo 'P': datainizio esiste sempre, datafine può non esistere
|
||||
//contratti rifatturazione 'R': come contratti anticipo
|
||||
|
||||
//controlla validità del contratto con le date scelte per l'elaborazione dei documenti
|
||||
const TDate data_ini_contratto = recset.get(DOC_DATACOMP).as_date();
|
||||
//controlla validità del contratto con le date scelte per l'elaborazione dei documenti
|
||||
const TDate data_ini_contratto = recset.get(DOC_DATACOMP).as_date();
|
||||
|
||||
TDate data_ini_elab = mask.get_date(F_DADATA);
|
||||
const TDate data_fine_elab = mask.get_date(F_ADATA);
|
||||
if (!data_ini_elab.ok())
|
||||
check_date(data_fine_elab, data_ini_elab);
|
||||
TDate data_ini_elab = mask.get_date(F_DADATA);
|
||||
const TDate data_fine_elab = mask.get_date(F_ADATA);
|
||||
if (!data_ini_elab.ok())
|
||||
check_date(data_fine_elab, data_ini_elab);
|
||||
|
||||
//quindi la datainizio vale per tutti allo stesso modo (è obbligatoria nei contratti)
|
||||
//se l'elaborazione finisce prima che cominci il contratto -> il contratto non serve a nulla
|
||||
if (data_ini_contratto > data_fine_elab)
|
||||
continue;
|
||||
//la data fine vale invece solo per i contratti 'P' e potrebbe non esserci (contratti senza scadenza)
|
||||
TDate data_fine_contratto;
|
||||
|
||||
//se la data fine contratto non è valida (ma è presente!) non dobbiamo fare nulla, perchè il contratto non va elaborato
|
||||
data_fine_contratto = recset.get(DOC_DATAFCOMP).as_date();
|
||||
if (data_fine_contratto.ok())
|
||||
{
|
||||
if (data_fine_contratto < data_ini_elab)
|
||||
//quindi la datainizio vale per tutti allo stesso modo (è obbligatoria nei contratti)
|
||||
//se l'elaborazione finisce prima che cominci il contratto -> il contratto non serve a nulla
|
||||
if (data_ini_contratto > data_fine_elab)
|
||||
continue;
|
||||
}
|
||||
//la data fine vale invece solo per i contratti 'P' e potrebbe non esserci (contratti senza scadenza)
|
||||
TDate data_fine_contratto;
|
||||
|
||||
//ci tocca istanziarci un contratto_premi
|
||||
TContratto_premi* curr_contratto = new TContratto_premi(recset.cursor()->curr());
|
||||
//azzeratore del campo con il totale reso per elaborazione, nel caso di contratti Anticipo/Rifatturazione, riga spese
|
||||
const char tipo_contr = curr_contratto->tipo_contratto();
|
||||
if (tipo_contr == 'A' || tipo_contr == 'R')
|
||||
{
|
||||
FOR_EACH_PHYSICAL_RDOC(*curr_contratto, r, rdoc)
|
||||
//se la data fine contratto non è valida (ma è presente!) non dobbiamo fare nulla, perchè il contratto non va elaborato
|
||||
data_fine_contratto = recset.get(DOC_DATAFCOMP).as_date();
|
||||
if (data_fine_contratto.ok())
|
||||
{
|
||||
if (rdoc->get(RDOC_TIPORIGA) == HARDY_TIPORIGA_SOMMA)
|
||||
if (data_fine_contratto < data_ini_elab)
|
||||
continue;
|
||||
}
|
||||
|
||||
//ci tocca istanziarci un contratto_premi
|
||||
TContratto_premi* curr_contratto = new TContratto_premi(recset.cursor()->curr());
|
||||
//azzeratore del campo con il totale reso per elaborazione, nel caso di contratti Anticipo/Rifatturazione, riga spese
|
||||
const char tipo_contr = curr_contratto->tipo_contratto();
|
||||
if (tipo_contr == 'A' || tipo_contr == 'R')
|
||||
{
|
||||
FOR_EACH_PHYSICAL_RDOC(*curr_contratto, r, rdoc)
|
||||
{
|
||||
rdoc->zero(RCA_2_RESO_CORRENTE);
|
||||
break;
|
||||
if (rdoc->get(RDOC_TIPORIGA) == HARDY_TIPORIGA_SOMMA)
|
||||
{
|
||||
rdoc->zero(RCA_2_RESO_CORRENTE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
contratti_cliente.add(curr_contratto);
|
||||
}
|
||||
contratti_cliente.add(curr_contratto);
|
||||
}
|
||||
|
||||
return contratti_cliente.items();
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user