Patch level :10.0 4.0

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :calcolo conai funzionante


git-svn-id: svn://10.65.10.50/trunk@16203 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2008-02-20 10:55:10 +00:00
parent 32a92bd876
commit 71ca1a7a71
3 changed files with 180 additions and 42 deletions

View File

@ -2,15 +2,18 @@
#include <applicat.h> #include <applicat.h>
#include <automask.h> #include <automask.h>
#include <config.h>
#include <modaut.h> #include <modaut.h>
#include <progind.h> #include <progind.h>
#include <reprint.h> #include <recarray.h>
#include <relation.h>
#include <reputils.h> #include <reputils.h>
#include <textset.h> #include <textset.h>
#include <doc.h>
#include <rdoc.h> #include <rdoc.h>
#include "../ve/velib.h"
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// MASCHERA // MASCHERA
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -67,7 +70,9 @@ class TDichiarazione_CONAI : public TSkeleton_application
{ {
protected: protected:
void crea_csv(const TMask& mask) const; void elabora(const TMask& mask) const;
void scrivi_csv(const TRectype& riga_generata, TDichiarazione_CONAI_csv_recordset& csv,
const int conai_specie) const;
public: public:
virtual bool create(); virtual bool create();
@ -75,8 +80,99 @@ public:
}; };
void TDichiarazione_CONAI::scrivi_csv(const TRectype& riga_generata, TDichiarazione_CONAI_csv_recordset& csv,
const int conai_specie) const
{
//crea la testata delle righedoc per poter fare vari calcoli (e intanto il tempo se ne va...)
const int anno = riga_generata.get_int(RDOC_ANNO);
const TString4 codnum = riga_generata.get(RDOC_CODNUM);
const long numdoc = riga_generata.get_long(RDOC_NDOC);
const TString80 conai_codart = riga_generata.get(RDOC_CODART); //questo ci serve per trovare le righe conai
const real totale_qta_assogg = riga_generata.get_real(RDOC_QTA); //questo ci serve per le quantita' assoggetate o no
TGeneric_distrib agip(totale_qta_assogg, 5); //distrib per ridistribuire le % dei quantitativi assoggetati
TArray qta_AB_conai; //array
TDocumento doc('D', anno, codnum, numdoc);
//scopre se il doc e' una NAC
const bool is_nac = doc.is_nota_credito();
const int nrighe = doc.rows();
//ciclo di creazione del distrib con le quote conai
for (int j = 1; j <= nrighe; j++)
{
const TRiga_documento& rdoc = doc[j];
//servono SOLO le righe CONAI!!!!!
const TString& codagg1 = rdoc.get(RDOC_CODAGG1);
const TString& codagg2 = rdoc.get(RDOC_CODAGG2);
if (codagg1 == conai_codart && codagg2.full())
{
//quantita' totale conai (A + B) sul report
const real n = rdoc.calc_conai_qta(conai_specie);
qta_AB_conai.add(n, j); //va calcolato con il metodo apposito
//quantita' assoggettata (B) sul report
agip.add(n);
}
}
//ciclo di riempimento delle righe csv;scandisce solo l'array con i valori compilati
FOR_EACH_ARRAY_ROW(qta_AB_conai, i, obj)
{
const TRiga_documento& rdoc = doc[i];
//servono SOLO le righe CONAI!!!!!
const TString& codagg1 = rdoc.get(RDOC_CODAGG1);
const TString& codagg2 = rdoc.get(RDOC_CODAGG2);
if (codagg1 == conai_codart && codagg2.full())
{
//creazione di un nuovo record da esportare
csv.new_rec("");
//parte chiave della riga
csv.set(0, TVariant(rdoc.get(RDOC_CODNUM)));
csv.set(1, TVariant(rdoc.get(RDOC_ANNO)));
csv.set(2, TVariant(rdoc.get(RDOC_NDOC)));
csv.set(3, TVariant(rdoc.get(RDOC_NRIGA)));
//codici conai
csv.set(4, TVariant(codagg1)); //codice materiale conai (es. carta, legno...)
csv.set(5, TVariant(codagg2)); //sottocodice materiale (es. carta imballo, busta...)
//prezzo
const real prezzo = riga_generata.get_real(RDOC_PREZZO); //va preso dalla riga generata
csv.set(6, TVariant(prezzo));
//um conai
const TString4 umqta = cache().get("SPP", conai_codart, "S7"); //unita' di misura dalla tabella SPP
csv.set(7, TVariant(umqta));
//quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato)
real qta_tot_conai = (real&)qta_AB_conai[i];
if (is_nac)
qta_tot_conai = -qta_tot_conai;
csv.set(8, TVariant(qta_tot_conai));
//quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato)
real qta_assoggettata_conai = agip.get();
if (is_nac)
qta_assoggettata_conai = -qta_assoggettata_conai;
csv.set(9, TVariant(qta_assoggettata_conai));
//quantita' esente conai (A) sul report
const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai;
csv.set(10, TVariant(qta_esente_conai));
}
}
}
//metodo di base per la ricerca delle righe documento che soddisfano i parametri dell'utonto //metodo di base per la ricerca delle righe documento che soddisfano i parametri dell'utonto
void TDichiarazione_CONAI::crea_csv(const TMask& mask) const void TDichiarazione_CONAI::elabora(const TMask& mask) const
{ {
//Tanto per cominciare stabilisce il range di date... //Tanto per cominciare stabilisce il range di date...
const int anno = mask.get_int(F_ANNO); const int anno = mask.get_int(F_ANNO);
@ -114,26 +210,33 @@ void TDichiarazione_CONAI::crea_csv(const TMask& mask) const
TConfig ditta_ini(CONFIG_DITTA, "ve"); TConfig ditta_ini(CONFIG_DITTA, "ve");
TVariant codart; TVariant codart;
TString esenzione;
switch (specie_conai) switch (specie_conai)
{ {
case 1: case 0:
codart = ditta_ini.get("CODACC"); //acciaio codart = ditta_ini.get("CODACC"); //acciaio
esenzione = "ESACC";
break;
case 1:
codart = ditta_ini.get("CODALL"); //alluminio
esenzione = "ESALL";
break; break;
case 2: case 2:
codart = ditta_ini.get("CODALL"); //alluminio codart = ditta_ini.get("CODCAR"); //carta
esenzione = "ESCAR";
break; break;
case 3: case 3:
codart = ditta_ini.get("CODCAR"); //carta codart = ditta_ini.get("CODPLA"); //plastica
esenzione = "ESPLA";
break; break;
case 4: case 4:
codart = ditta_ini.get("CODPLA"); //plastica codart = ditta_ini.get("CODLEG"); //legno
esenzione = "ESLEG";
break; break;
case 5: case 5:
codart = ditta_ini.get("CODLEG"); //legno
break;
case 6:
codart = ditta_ini.get("CODVET"); //vetro codart = ditta_ini.get("CODVET"); //vetro
esenzione = "ESVET";
break; break;
default: default:
break; break;
@ -143,14 +246,16 @@ void TDichiarazione_CONAI::crea_csv(const TMask& mask) const
TSheet_field& sf = mask.sfield(F_TIPI); TSheet_field& sf = mask.sfield(F_TIPI);
//la query e' sulle righe documento //la query e' sulle righe documento
//cerca le righe con numerazione e tipo indicate nello sheet;prende sia le righe che generano CONAI (per avere il codice conai,..
//..le quantita' etc) e le righe generate da CONAI (per avere i prezzi)
TString query; TString query;
query << "USE RDOC KEY 5\n"; query << "USE RDOC KEY 5\n";
query << "SELECT ((NUM(ANSI(33.DATADOC))>=NUM(ANSI(#DADATA)))&&(NUM(ANSI(33.DATADOC))<=NUM(ANSI(#ADATA))))&&(33.TIPODOC=#TIPODOC)&&(GENERATA=\"X\")\n"; query << "SELECT (NUM(ANSI(33.DATADOC))>=NUM(ANSI(#DADATA)))&&(NUM(ANSI(33.DATADOC))<=NUM(ANSI(#ADATA)))&&(33.TIPODOC=#TIPODOC)&&(GENERATA=\"X\")\n";
query << "JOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC\n"; query << "JOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC\n";
query << "FROM CODART=#CODART ANNO=#ANNO CODNUM=#CODNUM PROVV=\"D\"\n"; query << "FROM CODART=#CODART ANNO=#ANNO CODNUM=#CODNUM PROVV=\"D\"\n";
query << "TO CODART=#CODART ANNO=#ANNO CODNUM=#CODNUM PROVV=\"D\"\n"; query << "TO CODART=#CODART ANNO=#ANNO CODNUM=#CODNUM PROVV=\"D\"\n";
//crea il recordset ed assegna subito i valori delle variabili che restano costanti al cambio.. //crea il recordset principale relativo alle righe originali CONAI ed assegna subito i valori delle variabili che restano costanti al cambio..
//..numerazione/tipo: sono le date ed il codice articolo //..numerazione/tipo: sono le date ed il codice articolo
TISAM_recordset rdoc(query); TISAM_recordset rdoc(query);
@ -161,7 +266,7 @@ void TDichiarazione_CONAI::crea_csv(const TMask& mask) const
//creazione del csv recordset che verra' riempito dai record del recordset rdoc //creazione del csv recordset che verra' riempito dai record del recordset rdoc
TDichiarazione_CONAI_csv_recordset csv; TDichiarazione_CONAI_csv_recordset csv;
const TString path = "C:/temp/cazzone.csv"; const TString path = "C:/temp/cazzone.xls";
//quante righe dello sheet processa? //quante righe dello sheet processa?
const long tot_items = sf.items(); const long tot_items = sf.items();
@ -173,37 +278,28 @@ void TDichiarazione_CONAI::crea_csv(const TMask& mask) const
rdoc.set_var("#CODNUM", TVariant(row->get(0))); rdoc.set_var("#CODNUM", TVariant(row->get(0)));
rdoc.set_var("#TIPODOC", TVariant(row->get(2))); rdoc.set_var("#TIPODOC", TVariant(row->get(2)));
//quanti record validi ha trovato?
const long items = rdoc.items(); const long items = rdoc.items();
#ifdef DBG #ifdef DBG
warning_box("Hai trovato %ld righe bello!", items); warning_box("Hai trovato %ld righe di %s! Ti sembrano abbastanza?", items, row->get(0));
#endif #endif
//E crea pure la progind.. //E crea pure la progind..
TProgind pi(tot_items, TR("Estrazione righe..."), true, true); TProgind pi(tot_items, TR("Generazione righe..."), true, true);
//Scansione del recordset trovato
for (bool ok = rdoc.move_first(); ok; ok = rdoc.move_next()) for (bool ok = rdoc.move_first(); ok; ok = rdoc.move_next())
{ {
if (!pi.addstatus(1)) if (!pi.addstatus(1))
break; break;
scrivi_csv(rdoc.cursor()->curr(), csv, specie_conai);
//creazione di un nuovo record da esportare } //for(bool ok = rdoc.move_first(..
csv.new_rec("");
} //FOR_EACH...
csv.set(0, rdoc.get(RDOC_CODNUM));
csv.set(1, rdoc.get(RDOC_ANNO));
csv.set(2, rdoc.get(RDOC_NDOC));
csv.set(3, rdoc.get(RDOC_NRIGA));
csv.set(4, rdoc.get(RDOC_CODART));
csv.set(5, rdoc.get(RDOC_PREZZO));
csv.set(6, rdoc.get(RDOC_UMQTA));
csv.set(7, rdoc.get(RDOC_QTA));
}
csv.save_as(path, fmt_text);
}
csv.save_as(path, fmt_text);
#ifdef DBG #ifdef DBG
xvt_sys_goto_url(path, "open"); xvt_sys_goto_url(path, "open");
@ -216,7 +312,7 @@ void TDichiarazione_CONAI::main_loop()
TDichiarazione_CONAI_mask mask; TDichiarazione_CONAI_mask mask;
while (mask.run() == K_ENTER) while (mask.run() == K_ENTER)
{ {
crea_csv(mask); elabora(mask);
} }
} }

View File

@ -11,4 +11,9 @@
#define F_TIPI 115 #define F_TIPI 115
#define F_SPECIECONAI 116 #define F_SPECIECONAI 116
#define F_SOCIO 120
#define F_UFFADD 121
#define F_RESP 122
#define F_PRODUT 123
#endif #endif

View File

@ -42,6 +42,7 @@ STRING F_RAGSOC 60
BEGIN BEGIN
PROMPT 17 2 "" PROMPT 17 2 ""
FLAGS "D" FLAGS "D"
FIELD #RAGSOC
END END
GROUPBOX DLG_NULL 78 5 GROUPBOX DLG_NULL 78 5
@ -55,6 +56,7 @@ BEGIN
ITEM "1|Annuale" MESSAGE HIDE,F_TRIMESTRE|HIDE,F_MESE ITEM "1|Annuale" MESSAGE HIDE,F_TRIMESTRE|HIDE,F_MESE
ITEM "2|Trimestrale" MESSAGE SHOW,F_TRIMESTRE|HIDE,F_MESE ITEM "2|Trimestrale" MESSAGE SHOW,F_TRIMESTRE|HIDE,F_MESE
ITEM "3|Mensile" MESSAGE HIDE,F_TRIMESTRE|SHOW,F_MESE ITEM "3|Mensile" MESSAGE HIDE,F_TRIMESTRE|SHOW,F_MESE
FIELD #PERIODO
END END
NUMBER F_ANNO 4 NUMBER F_ANNO 4
@ -62,6 +64,7 @@ BEGIN
PROMPT 28 5 "Anno " PROMPT 28 5 "Anno "
HELP "Anno per cui effettuare la dichiarazione" HELP "Anno per cui effettuare la dichiarazione"
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
FIELD #ANNO
END END
LIST F_MESE 15 LIST F_MESE 15
@ -69,6 +72,7 @@ BEGIN
PROMPT 28 6 "Periodo " PROMPT 28 6 "Periodo "
HELP "Mese per cui effettuare la dichiarazione" HELP "Mese per cui effettuare la dichiarazione"
FLAGS "AM" FLAGS "AM"
FIELD #MESE
END END
LIST F_TRIMESTRE 15 LIST F_TRIMESTRE 15
@ -79,6 +83,7 @@ BEGIN
ITEM "6|2 Trimestre " ITEM "6|2 Trimestre "
ITEM "9|3 Trimestre " ITEM "9|3 Trimestre "
ITEM "12|4 Trimestre" ITEM "12|4 Trimestre"
FIELD #TRIMESTRE
END END
TEXT DLG_NULL TEXT DLG_NULL
@ -86,7 +91,7 @@ BEGIN
PROMPT 1 9 "@bNumerazioni e tipi documento da considerare" PROMPT 1 9 "@bNumerazioni e tipi documento da considerare"
END END
SPREADSHEET F_TIPI 0 5 SPREADSHEET F_TIPI 0 4
BEGIN BEGIN
PROMPT 1 10 "" PROMPT 1 10 ""
ITEM "Numerazione" ITEM "Numerazione"
@ -97,16 +102,48 @@ END
LIST F_SPECIECONAI 12 LIST F_SPECIECONAI 12
BEGIN BEGIN
PROMPT 1 16 "@bSpecie CONAI da considerare" PROMPT 1 15 "@bSpecie CONAI da considerare"
ITEM "1|Acciaio " ITEM "0|Acciaio "
ITEM "2|Alluminio " ITEM "1|Alluminio "
ITEM "3|Carta " ITEM "2|Carta "
ITEM "4|Plastica " ITEM "3|Plastica "
ITEM "5|Legno " ITEM "4|Legno "
ITEM "6|Vetro " ITEM "5|Vetro "
HELP "Codice spesa per contributo CONAI" HELP "Codice spesa per contributo CONAI"
END END
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 1 16 "@bDati Dichiarante"
END
STRING F_SOCIO 6
BEGIN
PROMPT 2 17 "Cod.Socio "
FIELD #SOCIO
END
STRING F_UFFADD 12
BEGIN
PROMPT 20 17 "Uff.Addetto "
FIELD #UFFADD
END
STRING F_RESP 12
BEGIN
PROMPT 48 17 "Responsabile "
FIELD #RESP
END
RADIOBUTTON F_PRODUT 28
BEGIN
PROMPT 2 18 ""
ITEM "1|Produttore"
ITEM "2|Utilizzatore"
FLAGS "Z"
FIELD #PRODUT
END
ENDPAGE ENDPAGE
ENDMASK ENDMASK