Patch level :10.0 820?
Files correlati : Ricompilazione Demo : [ ] Commento : riporto dalla 11 git-svn-id: svn://10.65.10.50/branches/R_10_00@20915 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
d741c541f9
commit
fc5ba87cdd
11
ha/ha0.cpp
11
ha/ha0.cpp
@ -14,15 +14,16 @@ int main(int argc,char** argv)
|
||||
switch (r)
|
||||
{
|
||||
case 1:
|
||||
rt = ha0200(argc, argv) ; break; //configurazione modulo Hardy
|
||||
rt = ha0200(argc, argv) ; break; //configurazione modulo
|
||||
break;
|
||||
case 2:
|
||||
rt = ha0300(argc, argv) ; break; //gestione documenti premio (contratti premio)
|
||||
rt = ha0300(argc, argv) ; break; //gestione contratti premio
|
||||
break;
|
||||
case 3:
|
||||
rt = ha0400(argc,argv) ; break; //elaborazione contratti premio pareggiati
|
||||
break;
|
||||
//case 3:
|
||||
//rt = ha0400(argc,argv) ; break; //contabilizzazione contratti premio Hardy
|
||||
case 4:
|
||||
rt = ha0500(argc,argv) ; break; //elaborazione documenti Hardy
|
||||
rt = ha0500(argc,argv) ; break; //elaborazione documenti (NAC - contratti premio)
|
||||
default:
|
||||
error_box(usage, argv[0]) ; break;
|
||||
}
|
||||
|
2
ha/ha0.h
2
ha/ha0.h
@ -1,4 +1,4 @@
|
||||
int ha0200(int argc, char* argv[]);
|
||||
int ha0300(int argc, char* argv[]);
|
||||
//int ha0400(int argc, char* argv[]);
|
||||
int ha0400(int argc, char* argv[]);
|
||||
int ha0500(int argc, char* argv[]);
|
||||
|
@ -92,7 +92,7 @@ bool TConf_Hardy::user_destroy( )
|
||||
|
||||
int ha0200(int argc, char* argv[])
|
||||
{
|
||||
TConf_Hardy app;
|
||||
app.run(argc, argv, TR("Configurazione Hardy"));
|
||||
TConf_Hardy configapp;
|
||||
configapp.run(argc, argv, TR("Configurazione modulo"));
|
||||
return 0;
|
||||
}
|
@ -4,7 +4,7 @@ TOOLBAR "topbar" 0 0 0 2
|
||||
#include <stdbar.h>
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Configurazione Hardy" -1 -1 78 23
|
||||
PAGE "Configurazione modulo" -1 -1 78 23
|
||||
|
||||
GROUPBOX DLG_NULL 76 4
|
||||
BEGIN
|
||||
@ -76,7 +76,7 @@ END
|
||||
|
||||
STRING F_CO_ANT_NUM 4
|
||||
BEGIN
|
||||
PROMPT 20 6 "Numerazione "
|
||||
PROMPT 20 6 "Num. "
|
||||
USE %NUM
|
||||
INPUT CODTAB F_CO_ANT_NUM
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -88,7 +88,7 @@ END
|
||||
|
||||
STRING F_CO_ANT_TIP 4
|
||||
BEGIN
|
||||
PROMPT 42 6 "Tipo "
|
||||
PROMPT 33 6 "Tipo "
|
||||
USE %TIP
|
||||
INPUT CODTAB F_CO_ANT_TIP
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -100,7 +100,7 @@ END
|
||||
|
||||
STRING F_CO_ANT_SPE 8
|
||||
BEGIN
|
||||
PROMPT 58 6 "Spesa "
|
||||
PROMPT 49 6 "Spesa riga ant. "
|
||||
USE SPP
|
||||
INPUT CODTAB F_CO_ANT_SPE
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -117,7 +117,7 @@ END
|
||||
|
||||
STRING F_NA_ANT_NUM 4
|
||||
BEGIN
|
||||
PROMPT 20 7 "Numerazione "
|
||||
PROMPT 20 7 "Num. "
|
||||
USE %NUM
|
||||
INPUT CODTAB F_NA_ANT_NUM
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -129,7 +129,7 @@ END
|
||||
|
||||
STRING F_NA_ANT_TIP 4
|
||||
BEGIN
|
||||
PROMPT 42 7 "Tipo "
|
||||
PROMPT 33 7 "Tipo "
|
||||
USE %TIP
|
||||
INPUT CODTAB F_NA_ANT_TIP
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -141,7 +141,7 @@ END
|
||||
|
||||
STRING F_NA_ANT_SPE 8
|
||||
BEGIN
|
||||
PROMPT 58 7 "Riga "
|
||||
PROMPT 49 7 "Spesa riga "
|
||||
USE SPP
|
||||
INPUT CODTAB F_NA_ANT_SPE
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -166,7 +166,7 @@ END
|
||||
|
||||
STRING F_CO_POST_NUM 4
|
||||
BEGIN
|
||||
PROMPT 20 10 "Numerazione "
|
||||
PROMPT 20 10 "Num. "
|
||||
USE %NUM
|
||||
INPUT CODTAB F_CO_POST_NUM
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -178,7 +178,7 @@ END
|
||||
|
||||
STRING F_CO_POST_TIP 4
|
||||
BEGIN
|
||||
PROMPT 42 10 "Tipo "
|
||||
PROMPT 33 10 "Tipo "
|
||||
USE %TIP
|
||||
INPUT CODTAB F_CO_POST_TIP
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -195,7 +195,7 @@ END
|
||||
|
||||
STRING F_NA_POST_NUM 4
|
||||
BEGIN
|
||||
PROMPT 20 11 "Numerazione "
|
||||
PROMPT 20 11 "Num. "
|
||||
USE %NUM
|
||||
INPUT CODTAB F_NA_POST_NUM
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -207,7 +207,7 @@ END
|
||||
|
||||
STRING F_NA_POST_TIP 4
|
||||
BEGIN
|
||||
PROMPT 42 11 "Tipo "
|
||||
PROMPT 33 11 "Tipo "
|
||||
USE %TIP
|
||||
INPUT CODTAB F_NA_POST_TIP
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -219,7 +219,7 @@ END
|
||||
|
||||
STRING F_NA_POST_SPE 8
|
||||
BEGIN
|
||||
PROMPT 58 11 "Riga "
|
||||
PROMPT 49 11 "Spesa riga "
|
||||
USE SPP
|
||||
INPUT CODTAB F_NA_POST_SPE
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -243,7 +243,7 @@ END
|
||||
|
||||
STRING F_CO_RIFA_NUM 4
|
||||
BEGIN
|
||||
PROMPT 20 14 "Numerazione "
|
||||
PROMPT 20 14 "Num. "
|
||||
USE %NUM
|
||||
INPUT CODTAB F_CO_RIFA_NUM
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -255,7 +255,7 @@ END
|
||||
|
||||
STRING F_CO_RIFA_TIP 4
|
||||
BEGIN
|
||||
PROMPT 42 14 "Tipo "
|
||||
PROMPT 33 14 "Tipo "
|
||||
USE %TIP
|
||||
INPUT CODTAB F_CO_RIFA_TIP
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -267,7 +267,7 @@ END
|
||||
|
||||
STRING F_CO_RIFA_SPE 8
|
||||
BEGIN
|
||||
PROMPT 58 14 "Spesa "
|
||||
PROMPT 49 14 "Spesa riga ant. "
|
||||
USE SPP
|
||||
INPUT CODTAB F_CO_RIFA_SPE
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -284,7 +284,7 @@ END
|
||||
|
||||
STRING F_NA_RIFA_NUM 4
|
||||
BEGIN
|
||||
PROMPT 20 15 "Numerazione "
|
||||
PROMPT 20 15 "Num. "
|
||||
USE %NUM
|
||||
INPUT CODTAB F_NA_RIFA_NUM
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -296,7 +296,7 @@ END
|
||||
|
||||
STRING F_NA_RIFA_TIP 4
|
||||
BEGIN
|
||||
PROMPT 42 15 "Tipo "
|
||||
PROMPT 33 15 "Tipo "
|
||||
USE %TIP
|
||||
INPUT CODTAB F_NA_RIFA_TIP
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -308,7 +308,7 @@ END
|
||||
|
||||
STRING F_NA_RIFA_SPE 8
|
||||
BEGIN
|
||||
PROMPT 58 15 "Riga "
|
||||
PROMPT 49 15 "Spesa riga "
|
||||
USE SPP
|
||||
INPUT CODTAB F_NA_RIFA_SPE
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
|
@ -208,6 +208,7 @@ protected:
|
||||
virtual int write(const TMask& m);
|
||||
virtual int rewrite(const TMask& m);
|
||||
virtual int read(TMask& m);
|
||||
virtual bool remove();
|
||||
|
||||
virtual void init_query_mode(TMask& m);
|
||||
virtual void init_insert_mode(TMask& m);
|
||||
@ -297,9 +298,9 @@ void TDocumenti_premio::read_rows(TMask& m)
|
||||
else if (tipo == HARDY_TIPORIGA_SOMMA)//se invece è la riga con le somme anticipate/maturate (solo 1 per contratto!) -> va messa in testata
|
||||
{
|
||||
const real anticipato = rec.get(RCA_2_ANTICIPATO);
|
||||
const real maturato = rec.get(RCA_2_RESTITUITO);
|
||||
const real maturato = rec.get(RCA_2_RESO_STORICO);
|
||||
m.set(F_ANTICIPATO, anticipato);
|
||||
m.set(F_RESTITUITO, maturato);
|
||||
m.set(F_RESO_STORICO, maturato);
|
||||
}
|
||||
|
||||
}
|
||||
@ -345,22 +346,25 @@ void TDocumenti_premio::write_rows(const TMask& m)
|
||||
rec.put(RDOC_TIPORIGA, HARDY_TIPORIGA_MERCE);
|
||||
}
|
||||
//salva la riga di tipo somme anticipate/rimborsate (H02) che in realtà è in testata
|
||||
//questo vale solo per i contratti di Anticip/Rifatturazione
|
||||
TConfig config(CONFIG_DITTA, "ha");
|
||||
//questo vale solo per i contratti di Anticip/Rifatturazione (lo fa solo se l'anticipo è > 0)
|
||||
|
||||
const char tipo_contr = m.get(F_TIPOCONTR)[0];
|
||||
if (tipo_contr == 'A' || tipo_contr == 'R')
|
||||
const real anticipato = m.get_real(F_ANTICIPATO);
|
||||
|
||||
if (anticipato > ZERO && (tipo_contr == 'A' || tipo_contr == 'R'))
|
||||
{
|
||||
const int righedoc_items = righedoc.rows();
|
||||
TRectype& last_rec = righedoc.row(righedoc_items + 1, true);
|
||||
const real anticipato = m.get_real(F_ANTICIPATO);
|
||||
const real maturato = m.get_real(F_RESTITUITO);
|
||||
|
||||
const real maturato = m.get_real(F_RESO_STORICO);
|
||||
last_rec.put(RCA_2_ANTICIPATO, anticipato);
|
||||
last_rec.put(RCA_2_RESTITUITO, maturato);
|
||||
last_rec.put(RCA_2_RESO_STORICO, maturato);
|
||||
last_rec.put(RDOC_TIPORIGA, HARDY_TIPORIGA_SOMMA);
|
||||
last_rec.put(RDOC_QTA, 1);
|
||||
|
||||
//panegirico sul codice iva (che ci va sennò col cavolo che si riesce a contabilizzare il contratto)
|
||||
TString80 codspp;
|
||||
TConfig config(CONFIG_DITTA, "ha");
|
||||
switch (tipo_contr)
|
||||
{
|
||||
case 'A': codspp = config.get("CoAntSpe"); break;
|
||||
@ -399,6 +403,15 @@ void TDocumenti_premio::init_modify_mode(TMask& m)
|
||||
m.disable(F_TIPOCONTR); //non si può cambiare il tipo contratto una volta stabilito sennò non funziona + un cazzo
|
||||
}
|
||||
|
||||
bool TDocumenti_premio::remove()
|
||||
{
|
||||
TSheet_field& righe = _msk->sfield(F_RIGHE);
|
||||
_msk->reset(F_ANTICIPATO);
|
||||
righe.destroy();
|
||||
write_rows(*_msk);
|
||||
return TRelation_application::remove();
|
||||
}
|
||||
|
||||
int TDocumenti_premio::write(const TMask& m)
|
||||
{
|
||||
const int err = TRelation_application::write(m);
|
||||
@ -439,7 +452,7 @@ bool TDocumenti_premio::user_destroy()
|
||||
|
||||
int ha0300(int argc, char* argv[])
|
||||
{
|
||||
TDocumenti_premio a;
|
||||
a.run(argc, argv, TR("Documenti premio Hardy"));
|
||||
TDocumenti_premio prizedocs;
|
||||
prizedocs.run(argc, argv, TR("Gestione contratti premio"));
|
||||
return 0;
|
||||
}
|
||||
|
@ -28,7 +28,7 @@
|
||||
#define F_NUMREG 227
|
||||
#define F_COLLEGA 228
|
||||
#define F_ANTICIPATO 229
|
||||
#define F_RESTITUITO 230
|
||||
#define F_RESO_STORICO 230
|
||||
|
||||
#define F_RIGHE 500 //questo va messo 500 sennò ve0 si incazza e non funziona più
|
||||
|
||||
|
@ -6,7 +6,7 @@ TOOLBAR "" 0 0 0 2
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Contratto premi Hardy" -1 -1 78 23
|
||||
PAGE "Gestione contratti premio" -1 -1 78 23
|
||||
|
||||
GROUPBOX DLG_NULL 78 13
|
||||
BEGIN
|
||||
@ -19,7 +19,6 @@ BEGIN
|
||||
ITEM "A|Anticipo" MESSAGE CLEAR,F_DATAFCOMP|ENABLE,1@
|
||||
ITEM "P|Posticipo" MESSAGE ENABLE,F_DATAFCOMP|CLEAR,1@
|
||||
ITEM "R|Rifatturazione" MESSAGE CLEAR,F_DATAFCOMP|ENABLE,1@
|
||||
FIELD TIPOCFFATT
|
||||
FLAGS "GZ"
|
||||
KEY 1
|
||||
END
|
||||
@ -120,16 +119,19 @@ NUMBER F_NDOC 6
|
||||
BEGIN
|
||||
PROMPT 24 4 "N. contr. premi "
|
||||
USE LF_DOC SELECT BETWEEN(CODCF,#F_CODCF,#F_CODCF)
|
||||
JOIN LF_CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF
|
||||
INPUT CODNUM F_CODNUM SELECT
|
||||
INPUT PROVV F_PROVV SELECT
|
||||
INPUT ANNO F_ANNO SELECT
|
||||
INPUT NDOC F_NDOC
|
||||
DISPLAY "Numero" NDOC
|
||||
DISPLAY "Data doc." DATADOC
|
||||
DISPLAY "Inizio validita" DATACOMP
|
||||
DISPLAY "Fine validita" DATAFCOMP
|
||||
DISPLAY "Tipo" TIPOCFFATT
|
||||
DISPLAY "Inizio@10" DATACOMP
|
||||
DISPLAY "Fine@10" DATAFCOMP
|
||||
DISPLAY "Tipo" TIPODOC
|
||||
DISPLAY "Agente" CODAG
|
||||
DISPLAY "Cliente" CODCF
|
||||
DISPLAY "Ragione sociale@50" LF_CLIFO->RAGSOC
|
||||
OUPUT F_NDOC NDOC
|
||||
FIELD NDOC
|
||||
KEY 1
|
||||
@ -299,10 +301,11 @@ END
|
||||
CURRENCY F_ANTICIPATO
|
||||
BEGIN
|
||||
PROMPT 3 11 "Anticipato "
|
||||
FLAGS "U"
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
CURRENCY F_RESTITUITO
|
||||
CURRENCY F_RESO_STORICO
|
||||
BEGIN
|
||||
PROMPT 38 11 "Restituito "
|
||||
GROUP 1
|
||||
|
213
ha/ha0500.cpp
213
ha/ha0500.cpp
@ -1,6 +1,5 @@
|
||||
#include <applicat.h>
|
||||
#include <automask.h>
|
||||
#include <dongle.h>
|
||||
#include <progind.h>
|
||||
#include <recarray.h>
|
||||
#include <recset.h>
|
||||
@ -126,7 +125,7 @@ protected:
|
||||
void elabora_documenti(const TMask& mask, TISAM_recordset& recset, TLog_report& log);
|
||||
|
||||
//metodi medio livello
|
||||
bool aggiorna_contratti(const TRiga_documento& rdoc, TDocumento& contratto);
|
||||
bool aggiorna_contratti(const TRiga_documento& rdoc, TContratto_premi& contratto);
|
||||
bool elabora_contratti(TDocumento& curr_doc, TArray& contratti_cliente);
|
||||
bool genera_nac(const TMask& mask, TArray& contratti_cliente, TArray& documenti_cliente, TLog_report& log);
|
||||
|
||||
@ -318,7 +317,7 @@ int THardy_elab_docs::find_contratti_cliente(const long codcf, const TMask& mask
|
||||
//deve cercare tutti i contratti del cliente e metterli nell'array
|
||||
TString query;
|
||||
query << "USE DOC KEY 4";
|
||||
query << "\nSELECT ((CODNUM=#A_CODNUM)||(CODNUM=#R_CODNUM)||(CODNUM=#P_CODNUM))";
|
||||
query << "\nSELECT ((TIPODOC=#A_TIPODOC)||(TIPODOC=#R_TIPODOC)||(TIPODOC=#P_TIPODOC))";
|
||||
query << "\nFROM TIPOCF=C CODCF=#CODCF";
|
||||
query << "\nTO TIPOCF=C CODCF=#CODCF";
|
||||
|
||||
@ -328,13 +327,13 @@ int THardy_elab_docs::find_contratti_cliente(const long codcf, const TMask& mask
|
||||
//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& num_ant = config.get("CoAntNum");
|
||||
const TString& num_rifa = config.get("CoRifaNum");
|
||||
const TString& num_post = config.get("CoPostNum");
|
||||
const TString& tip_ant = config.get("CoAntTip");
|
||||
const TString& tip_rifa = config.get("CoRifaTip");
|
||||
const TString& tip_post = config.get("CoPostTip");
|
||||
|
||||
recset.set_var("#A_CODNUM", num_ant);
|
||||
recset.set_var("#R_CODNUM", num_rifa);
|
||||
recset.set_var("#P_CODNUM", num_post);
|
||||
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", codcf);
|
||||
|
||||
@ -343,9 +342,6 @@ int THardy_elab_docs::find_contratti_cliente(const long codcf, const TMask& mask
|
||||
//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())
|
||||
{
|
||||
//controlla il tipo di contratto
|
||||
const char tipo_contr = recset.get(DOC_TIPOCFFATT).as_string()[0];
|
||||
|
||||
//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
|
||||
@ -364,18 +360,30 @@ int THardy_elab_docs::find_contratti_cliente(const long codcf, const TMask& mask
|
||||
continue;
|
||||
//la data fine vale invece solo per i contratti 'P' e potrebbe non esserci (contratti senza scadenza)
|
||||
TDate data_fine_contratto;
|
||||
if (tipo_contr == 'P')
|
||||
|
||||
//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())
|
||||
{
|
||||
data_fine_contratto = recset.get(DOC_DATAFCOMP).as_date();
|
||||
if (data_fine_contratto.ok())
|
||||
{
|
||||
if (data_fine_contratto < data_ini_elab)
|
||||
continue;
|
||||
}
|
||||
if (data_fine_contratto < data_ini_elab)
|
||||
continue;
|
||||
}
|
||||
|
||||
TDocumento* curr_contratto = new TDocumento(recset.get(DOC_PROVV).as_string()[0], recset.get(DOC_ANNO).as_int(),
|
||||
recset.get(DOC_CODNUM).as_string(), recset.get(DOC_NDOC).as_int());
|
||||
//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)
|
||||
{
|
||||
if (rdoc->get(RDOC_TIPORIGA) == HARDY_TIPORIGA_SOMMA)
|
||||
{
|
||||
rdoc->zero(RCA_2_RESO_CORRENTE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
contratti_cliente.add(curr_contratto);
|
||||
}
|
||||
|
||||
@ -383,10 +391,10 @@ int THardy_elab_docs::find_contratti_cliente(const long codcf, const TMask& mask
|
||||
}
|
||||
|
||||
|
||||
bool THardy_elab_docs::aggiorna_contratti(const TRiga_documento& rdoc, TDocumento& contratto)
|
||||
bool THardy_elab_docs::aggiorna_contratti(const TRiga_documento& rdoc, TContratto_premi& contratto)
|
||||
{
|
||||
bool elaborato = false;
|
||||
const char tipo_contratto = contratto.get(DOC_TIPOCFFATT)[0];
|
||||
const char tipo_contratto = contratto.tipo_contratto();
|
||||
//parametri della riga fattura
|
||||
TString80 rdoc_codart = rdoc.get(RDOC_CODART);
|
||||
rdoc_codart.trim();
|
||||
@ -416,14 +424,19 @@ bool THardy_elab_docs::aggiorna_contratti(const TRiga_documento& rdoc, TDocument
|
||||
//cerca una riga anticipo da evadere sul contratto per aggiornare la somma restituita sull'anticipo
|
||||
if (rigacontratto->is_spese())
|
||||
{
|
||||
//si informa su quale fosse la somma anticipata
|
||||
const real somma_anticipata = rigacontratto->get_real(RCA_2_ANTICIPATO);
|
||||
//aggiorna la somma restituita dovuta al contratto (parte da zero per ogni elaborazione di NAC)
|
||||
real somma_restituita = rigacontratto->get_real(RCA_2_RESTITUITO);
|
||||
real somma_restituita = rigacontratto->get_real(RCA_2_RESO_CORRENTE);
|
||||
//controlla che il contratto non sia per caso già stato pareggiato! quindi il reso deve essere < dell'anticipato per procedere
|
||||
|
||||
//la somma restituita deve essere incrementata per la qta di merce (caffè) che c'è sulla riga della fattura in esame...
|
||||
//..moltiplicata per il premio che c'è nella riga di tipo merce del contratto in esame
|
||||
somma_restituita += normalized_rdoc_qta * rigamerce_premio;
|
||||
rigacontratto->put(RCA_2_RESTITUITO, somma_restituita);
|
||||
rigacontratto->put(RCA_2_RESO_CORRENTE, somma_restituita);
|
||||
elaborato = true;
|
||||
break;
|
||||
|
||||
}
|
||||
} //FOR_EACH_PHYSICAL.. fine casino sulla riga di tipo spese
|
||||
|
||||
@ -466,7 +479,7 @@ bool THardy_elab_docs::elabora_contratti(TDocumento& curr_doc, TArray& contratti
|
||||
//controlla se il codart della riga esiste in uno dei contratti validi
|
||||
for (int i = 0; i < contratti_cliente.items(); i++)
|
||||
{
|
||||
TDocumento& contratto = (TDocumento&)contratti_cliente[i];
|
||||
TContratto_premi& contratto = (TContratto_premi&)contratti_cliente[i];
|
||||
elaborato |= aggiorna_contratti(*rdoc, contratto);
|
||||
} //for(int i..
|
||||
} //FOR_EACH...
|
||||
@ -483,16 +496,15 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
||||
//giro su tutti i contratti del cliente che stanno nell'array (ogni contratto genera una NAC)
|
||||
FOR_EACH_ARRAY_ITEM(contratti_cliente, r, riga)
|
||||
{
|
||||
TDocumento& contratto = *(TDocumento*)riga;
|
||||
TContratto_premi& contratto = *(TContratto_premi*)riga;
|
||||
const long ndoc = contratto.numero(); //il numdoc del contratto serve nelle segnalazioni
|
||||
const long codcf = contratto.codcf(); //il codice cliente ci serve nella generazione della NAC..
|
||||
const char tipo_contratto = contratto.get(DOC_TIPOCFFATT)[0]; //..e pure il tipo di contratto in esame!
|
||||
const char tipo_contratto = contratto.tipo_contratto(); //..e pure il tipo di contratto in esame!
|
||||
|
||||
//segnaliamo l'elaborazione del contratto sul log
|
||||
TString msg;
|
||||
msg << "Elaborato contratto premi n." << ndoc << " del cliente " << codcf;
|
||||
log.log(0, msg);
|
||||
|
||||
TString log_msg;
|
||||
log_msg.format("Contratto:%6ld Cliente:%6ld", ndoc, codcf);
|
||||
//log_msg << "Contratto: " << ndoc << " Cliente: " << codcf;
|
||||
|
||||
// generazione del documento NAC dal contratto
|
||||
// -------------------------------------------
|
||||
@ -551,26 +563,24 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
||||
{
|
||||
const TRiga_documento& riga_contratto = contratto[i]; //le righe di un documento partono da 1! (standard del mercoledì)
|
||||
const TString& tiporiga = riga_contratto.get(RDOC_TIPORIGA);
|
||||
const TString& tipo_riga_contratto = cache().get("%TRI", tiporiga, "S7");
|
||||
|
||||
TString80 riga_contratto_codart = riga_contratto.get(RDOC_CODART);
|
||||
|
||||
//solo le righe di tipo merce (verigh01) dei contratti devono comparire nelle NAC
|
||||
if (tipo_riga_contratto == "M")
|
||||
if (tiporiga == HARDY_TIPORIGA_MERCE)
|
||||
{
|
||||
TString80 riga_contratto_codart = riga_contratto.get(RDOC_CODART);
|
||||
riga_contratto_codart.trim();
|
||||
const real riga_contratto_qta = riga_contratto.get_real(RDOC_QTA);
|
||||
const TString4 riga_contratto_um = riga_contratto.get(RDOC_UMQTA);
|
||||
const real riga_contratto_premio = riga_contratto.get_real(RC_1_PREMIO);
|
||||
|
||||
// riga (dovrebbe essere un'unica riga per NAC, il cui valore sta in QTAGG3 ed è stato calcolato nella elabora_contratti())
|
||||
// riga merce NAC
|
||||
TRiga_documento& nac_row = nac.new_row(tipo_riga);
|
||||
nac_row.put(RDOC_NRIGA, i);
|
||||
nac_row.put(RDOC_CODART, cod_riga);
|
||||
|
||||
//panegirico della descrizione
|
||||
nac_row.put(RDOC_DESCR, descr_riga_spp);
|
||||
|
||||
msg.cut(0); //risparmiamo sulle stringhe, mica sono gratis
|
||||
TString msg;
|
||||
const TDate adata = mask.get_date(F_ADATA);
|
||||
TDate dadata = mask.get_date(F_DADATA);
|
||||
if (!dadata.ok())
|
||||
@ -588,46 +598,103 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
||||
//iva
|
||||
nac_row.put(RDOC_CODIVA, codiva);
|
||||
}
|
||||
|
||||
//trattazione speciale delle righe spese (verigh02) (solo 'A'nticipi e 'R'ifatturazioni)
|
||||
if (tiporiga == HARDY_TIPORIGA_SOMMA && (tipo_contratto == 'A' || tipo_contratto == 'R'))
|
||||
{
|
||||
const real somma_anticipata = riga_contratto.get_real(RCA_2_ANTICIPATO);
|
||||
real somma_resa_storica = riga_contratto.get_real(RCA_2_RESO_STORICO);
|
||||
real somma_resa_corrente = riga_contratto.get_real(RCA_2_RESO_CORRENTE);
|
||||
|
||||
const real esubero = somma_resa_storica + somma_resa_corrente - somma_anticipata;
|
||||
if (esubero > ZERO)
|
||||
{
|
||||
somma_resa_corrente -= esubero;
|
||||
|
||||
//se c'è un esubero nel rimborso dell'anticipo esisterà solo una riga nella NAC, con una cifra pari alla somma..
|
||||
//..che mancava a pareggiare l'anticipo (anche se l'esubero eccedesse tale differenza, sulla NAC ci va la somma a..
|
||||
//..pareggio! così freghiamo qualcosa al cliente)
|
||||
nac.destroy_rows();
|
||||
|
||||
// riga spesa NAC
|
||||
TRiga_documento& nac_row = nac.new_row(tipo_riga);
|
||||
nac_row.put(RDOC_CODART, cod_riga);
|
||||
|
||||
//panegirico della descrizione
|
||||
nac_row.put(RDOC_DESCR, descr_riga_spp);
|
||||
|
||||
TString msg;
|
||||
const TDate adata = mask.get_date(F_ADATA);
|
||||
TDate dadata = mask.get_date(F_DADATA);
|
||||
if (!dadata.ok())
|
||||
check_date(adata, dadata);
|
||||
|
||||
msg << " " << dadata << " -- " << adata;
|
||||
nac_row.put(RDOC_DESCEST, msg);
|
||||
nac_row.put(RDOC_DESCLUNGA, "X");
|
||||
|
||||
//importi, qta
|
||||
nac_row.put(RDOC_QTA, 1);
|
||||
nac_row.put(RDOC_PREZZO, somma_resa_corrente);
|
||||
|
||||
//iva
|
||||
nac_row.put(RDOC_CODIVA, codiva);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// salvataggi vari
|
||||
// ---------------
|
||||
//la NAC viene scritta comunque, con provv='D' se elaborazione definitiva
|
||||
// NAC
|
||||
// viene scritta comunque, con provv='D' se elaborazione definitiva
|
||||
int err = nac.write();
|
||||
|
||||
msg.cut(0); //la fase di risparmio stringhe continua
|
||||
TString wrk_msg;
|
||||
if (err == NOERR)
|
||||
msg << "Generata NAC ";
|
||||
{
|
||||
wrk_msg.format(" -- Generata NAC: %-4s%-4s%c %7ld", (const char*)nac_codnum, (const char*)nac_tipo, provv, nac.get_long(DOC_NDOC));
|
||||
log_msg << wrk_msg;
|
||||
}
|
||||
else
|
||||
msg << "Impossibile generare NAC ";
|
||||
msg << " - provv:" << provv << " - num:" << nac_codnum << " - tipo:" << nac_tipo << " - anno:" << anno << " |" << r;
|
||||
log.log(0, msg);
|
||||
log_msg << " -- Impossibile generare NAC !!";
|
||||
|
||||
// CONTRATTO
|
||||
|
||||
//se il contratto è di tipo A/R aggiorna la riga spese speciale (verigh02)
|
||||
if ((tipo_contratto == 'A' || tipo_contratto == 'R') && err == NOERR)
|
||||
{
|
||||
FOR_EACH_PHYSICAL_RDOC(contratto, r, rdoc)
|
||||
{
|
||||
if (rdoc->get(RDOC_TIPORIGA) == HARDY_TIPORIGA_SOMMA)
|
||||
{
|
||||
const real anticipato = rdoc->get_real(RCA_2_ANTICIPATO);
|
||||
real reso_storico = rdoc->get_real(RCA_2_RESO_STORICO);
|
||||
reso_storico += rdoc->get_real(RCA_2_RESO_CORRENTE);
|
||||
rdoc->put(RCA_2_RESO_STORICO, reso_storico);
|
||||
//se il contratto è andato a pareggio avverte dilegentemente l'operatore
|
||||
if (reso_storico >= anticipato)
|
||||
log_msg << " -- Contratto pareggiato!";
|
||||
|
||||
} //if (rdoc->get(RDOC_TIPORIGA)...
|
||||
} //FOR_EACH_PHYSICAL_RDOC(contratto...
|
||||
} //if (tipo_contratto == 'A'..
|
||||
|
||||
|
||||
// se non ci sono errori -> in caso di elaborazione definitiva procede alla registrazione..
|
||||
//.. del contratto (ricordiamo che in memoria il contratto ha già le righe aggiornate
|
||||
if (definitivo && err == NOERR)
|
||||
{
|
||||
//prima di registrare il contratto vanno svuotati i campi appoggio sulle righe che sono stati usati..
|
||||
//..per qta e premi vari e riempiti nella elabora_contratti()
|
||||
for (int i = 1; i <= contratto.rows(); i++)
|
||||
{
|
||||
TRiga_documento& riga_contratto = contratto[i];
|
||||
riga_contratto.put(RDOC_QTAGG3, ZERO);
|
||||
riga_contratto.put(RDOC_QTA, ZERO);
|
||||
}
|
||||
|
||||
//alla fine della fiera aggiorna il contratto
|
||||
err = contratto.rewrite();
|
||||
msg.cut(0);
|
||||
if (err == NOERR)
|
||||
msg << "Aggiornato contratto premi n. ";
|
||||
else
|
||||
msg << "Impossibile aggiornare il contratto premi n. ";
|
||||
|
||||
msg << ndoc << " del cliente " << codcf;
|
||||
log.log(0, msg);
|
||||
if (err == NOERR)
|
||||
log_msg << " -- Contratto aggiornato";
|
||||
else
|
||||
log_msg << " -- Impossibile aggiornare contratto";
|
||||
}
|
||||
|
||||
log.log(0, log_msg);
|
||||
log.log(0, "");
|
||||
|
||||
} //FOR_EACH_ARRAY_ITEM(... giro sui contratti cliente
|
||||
@ -638,9 +705,9 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
||||
}
|
||||
|
||||
|
||||
void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& recset, TLog_report& log)
|
||||
void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fatture, TLog_report& log)
|
||||
{
|
||||
TProgind pi(recset.items(), TR("Elaborazione documenti in corso..."), true, true);
|
||||
TProgind pi(fatture.items(), TR("Elaborazione documenti in corso..."), true, true);
|
||||
|
||||
//inizializza variabili da usare nella scansione del recordset
|
||||
long old_codcf = 0L;
|
||||
@ -648,15 +715,21 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& rec
|
||||
TArray contratti_cliente, documenti_cliente;
|
||||
|
||||
//giro sulle fatture (è il giro di più alto livello che viene esteso all'interno delle elabora_contratti)
|
||||
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
||||
for (bool ok = fatture.move_first(); ok; ok = fatture.move_next())
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
|
||||
const long codcf = recset.get(DOC_CODCF).as_int();
|
||||
const long codcf = fatture.get(DOC_CODCF).as_int();
|
||||
//al cambio cliente deve controllare i contratti di quel cliente nel periodo di elaborazione!!
|
||||
if (codcf != old_codcf)
|
||||
{
|
||||
//generazione NAC del cliente precedente (una per contratto cliente)
|
||||
if (old_codcf > 0)
|
||||
genera_nac(mask, contratti_cliente, documenti_cliente, log);
|
||||
|
||||
|
||||
CHECK(codcf > old_codcf, "Ordinamento clienti errato!");
|
||||
//aggiorna old_codcf in modo da poter controllare i contratti solo al cambio codcf
|
||||
old_codcf = codcf;
|
||||
|
||||
@ -672,7 +745,7 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& rec
|
||||
if (contratti_cliente.items() > 0)
|
||||
{
|
||||
//se ha trovato uno o più contratti validi nel periodo passa alla elaborazione dei documenti del cliente
|
||||
TDocumento* curr_doc = new TDocumento(recset.cursor()->curr());
|
||||
TDocumento* curr_doc = new TDocumento(fatture.cursor()->curr());
|
||||
//elabora il documento corrente aggiornando le somme restituite sui contratti validi
|
||||
if (elabora_contratti(*curr_doc, contratti_cliente))
|
||||
documenti_cliente.add(curr_doc);
|
||||
@ -681,7 +754,7 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& rec
|
||||
}
|
||||
} //for (bool ok = recset.move_first()...
|
||||
|
||||
//generazione NAC (una per contratto cliente)
|
||||
//generazione NAC dell'ultimo cliente (una per contratto cliente)
|
||||
genera_nac(mask, contratti_cliente, documenti_cliente, log);
|
||||
|
||||
//se elaborazione definitiva -> cambia lo stato ai documenti di vendita elaborati, mettendolo uguale..
|
||||
@ -752,7 +825,7 @@ bool THardy_elab_docs::create()
|
||||
|
||||
int ha0500 (int argc, char* argv[])
|
||||
{
|
||||
THardy_elab_docs main_app;
|
||||
main_app.run(argc, argv, TR("Elaborazione documenti Hardy"));
|
||||
return true;
|
||||
THardy_elab_docs elabapp;
|
||||
elabapp.run(argc, argv, TR("Generazione NAC"));
|
||||
return 0;
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
#include "ha0500a.h"
|
||||
|
||||
PAGE "Elaborazione documenti Hardy" -1 -1 78 11
|
||||
PAGE "Generazione NAC" -1 -1 78 11
|
||||
|
||||
GROUPBOX DLG_NULL 76 5
|
||||
BEGIN
|
||||
|
20
ha/halib.h
20
ha/halib.h
@ -1,3 +1,7 @@
|
||||
#ifndef __VELIB_H
|
||||
#include "../ve/velib.h"
|
||||
#endif
|
||||
|
||||
//definizioni delle righe dei contratti premio Hardy (da includere nei .cpp)
|
||||
#define HARDY_TIPORIGA_MERCE "H01"
|
||||
#define HARDY_TIPORIGA_SOMMA "H02"
|
||||
@ -13,6 +17,18 @@
|
||||
#define RC_1_NSCARICO RDOC_QTAGG2
|
||||
#define RC_1_BONUS RDOC_QTAGG5
|
||||
|
||||
#define RCA_2_ANTICIPATO RDOC_PREZZO
|
||||
#define RCA_2_RESTITUITO RDOC_QTAGG5
|
||||
#define RCA_2_ANTICIPATO RDOC_PREZZO
|
||||
#define RCA_2_RESO_STORICO RDOC_QTAGG5
|
||||
#define RCA_2_RESO_CORRENTE RDOC_QTAGG3
|
||||
|
||||
|
||||
class TContratto_premi : public TDocumento
|
||||
{
|
||||
static TString4 _tipo_ant, _tipo_post, _tipo_rifa;
|
||||
|
||||
public:
|
||||
char tipo_contratto() const;
|
||||
|
||||
TContratto_premi(char provv, int anno, const char* codnum, long ndoc);
|
||||
TContratto_premi(const TRectype& rec_doc);
|
||||
};
|
@ -3,8 +3,10 @@ Caption = "Hardy caffe'"
|
||||
Picture = <ha01>
|
||||
Module = 46
|
||||
Flags = "F"
|
||||
Item_01 = "Configurazione Hardy", "ha0 -1", ""
|
||||
Item_01 = "Configurazione modulo", "ha0 -1", ""
|
||||
Item_02 = "Gestione contratti premio", "ha0 -2", ""
|
||||
Item_03 = "Contabilizzazione contratti premio", "ve6 -1", "F"
|
||||
Item_04 = "Generazione NAC", "ha0 -4", ""
|
||||
Item_05 = "Gestione listini", "ve2 -4", ""
|
||||
Item_05 = "Elaborazione contratti premio pareggiati", "ha0 -3", "F"
|
||||
Item_06 = "Gestione listini", "ve2 -4", ""
|
||||
Item_07 = "Stampa listini", "ve3 -4 L", ""
|
||||
|
Loading…
x
Reference in New Issue
Block a user