#include #include #include #include #include #include #include #include #include "pd5317.h" #include "pd5317100.h" #include #include #include "../ca/rmovana.h" //Stampa Listino Carrelli //lvietri class TCarrelli_recordset: public TCSV_recordset { public: TCarrelli_recordset(): TCSV_recordset("CSV(\"\t\")") {} }; //DEFINIZIONE DELLA STRUTTURA struct TStruttura_carrelli: public TObject { const TString _articolo; TString _user1; TString _user2; TString _user3; TString _user4; TString _user5; TString _user6; TString _user7; TString _user8; TString _user9; TString _user10; TString _user11; TString _user12; TString _user13; TString _user14; TDate _data_doc; TString16 _num_doc; TCurrency _importob; TDate _data_gara; TCurrency _prezzoAcq; TString _descr_conto; TString _modello; TCurrency _noleggio; TCurrency _revisione, _manutenzione; TString _venduto_a; TCurrency _prezzo_vend; TCurrency _prezzo_p1; TCurrency _prezzo_autom; TCurrency _prezzo_recup; TStruttura_carrelli() {} TStruttura_carrelli(TString articolo,TString user[],TDate dataDoc, const TString& numDoc, TCurrency importob, TDate data_gara, TCurrency prezzoAcq,TString descrAcq, TString modello,TCurrency noleggio,TCurrency revisione,TCurrency manutenzione, TString venduto_a, TCurrency prezzoVend,TCurrency prezzo_p1, TCurrency prezzo_autom, TCurrency prezzo_recup): _articolo(articolo),_user1 (user[0 ]),_user2 (user[1 ]),_user3 (user[2 ]), _user4 (user[3 ]),_user5 (user[4 ]),_user6 (user[5 ]),_user7 (user[6 ]), _user8 (user[7 ]),_user9 (user[8 ]),_user10(user[9 ]),_user11(user[10]), _user12(user[11]),_user13(user[12]),_user14(user[13]),_data_doc(dataDoc), _num_doc(numDoc), _importob(importob),_data_gara(data_gara) ,_prezzoAcq(prezzoAcq), _descr_conto(descrAcq), _modello(modello),_noleggio(noleggio), _revisione(revisione), _manutenzione(manutenzione),_venduto_a(venduto_a), _prezzo_vend(prezzoVend), _prezzo_p1(prezzo_p1), _prezzo_autom(prezzo_autom),_prezzo_recup(prezzo_recup) {} }; class TCarrelli_mask: public TAutomask { protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: TCarrelli_mask():TAutomask("pd5317100"){} }; bool TCarrelli_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { return true; } class TCarrelli_report : public TReport { protected: virtual bool use_mask() { return false; } public: TCarrelli_report(); }; TCarrelli_report::TCarrelli_report() { load("pd5317100"); set_recordset(new TCarrelli_recordset()); } class TCarrelli_app: public TSkeleton_application { protected: virtual void main_loop(); void elabora(const TMask& mask) const; const TString& get_query(int tipo, bool venduto = false, const TString& commessa = EMPTY_STRING) const; const TString& get_query_saldana(const char* codice, const char* operatore = "==") const; const char* extra_modules() const { return "mg"; } }; const TString& TCarrelli_app::get_query_saldana(const char* codice, const char* operatore) const { //Stringhe x composizione query TString& query = get_tmp_string(); query << "USE SALDANA KEY 2\n" << "SELECT ((CONTO" << operatore<< "'" << codice << "')&&" << "(BETWEEN(COMMESSA,#COMM,#COMM)))"; return query; } const TString& TCarrelli_app::get_query(int tipo, bool venduto, const TString& commessa) const { //Stringhe x composizione query TString select, between, join, order_by; if(tipo==0)//query su analitica\articoli\commesse { const char* operConto = venduto ? "==" : "!="; select << "USE SALDANA KEY 2\n"; select << "SELECT ((CONTO" << operConto << "'004076000003')&&"; between << "(ANAMAG.CODART!='')&&"; between << "(BETWEEN(COMMESSA,#FROM,#TO)))\n"; order_by<< "BY COMMESSA\n"; join << "JOIN ANAMAG TO SALDANA INTO CODART==COMMESSA \n"; join << "JOIN COMMESSE TO SALDANA INTO CODCMS==COMMESSA \n"; if (venduto) { join << "FROM CONTO='004076000003' \n"; join << "TO CONTO='004076000003' \n"; } } else if(tipo==1)//query su articolo\doc. { /* select << "USE DOC KEY 3\n"; select << "SELECT ((TIPODOC='B01')&&"; between << "(BETWEEN(CODCMS,#COMM,#COMM)))\n"; join << "JOIN CLIFO TO DOC INTO TIPOCF==TIPOCF CODCF==CODCF\n"; join << "JOIN INDSPED TO DOC INTO TIPOCF==TIPOCF CODCF==CODCF CODIND==CODINDSP\n"; join << "JOIN COMUNI TO CLIFO INTO COM==COMCF \n"; */ select << "USE RDOC KEY 6 SELECT DOC.TIPODOC='B01'\n"; join << "JOIN DOC INTO PROVV=PROVV ANNO=ANNO CODNUM==CODNUM NDOC==NDOC\n"; join << "FROM CODCMS=#COMM\n"; join << "TO CODCMS=#COMM\n"; } else if(tipo==2)//query su saldana ACQUISTO DA { select << "USE SALDANA KEY 2\n"; select << "SELECT (((CONTO ?='003081*')||(CONTO =='003071000002'))&&"; between << "(BETWEEN(COMMESSA,#COMM,#COMM)))"; join << "\nFROM CONTO=003071000002"; join << "\nTO CONTO=003081999999"; } else if(tipo==3)//query su piano dei conti. { select << "USE PCON\n" << "SELECT ((GRUPPO=#GRUPPO1)&&(CONTO=#CONTO1)&&(SOTTOCONTO=#SOTTOCONTO1))"; } else if(tipo==4)//query su multirel per sapere se cespite { select << "USE MULTIREL KEY 2\n"; select << "SELECT ((COD =='CEMAT')&&"; between << "(BETWEEN(SECOND,#COMM,#COMM)))"; } else if(tipo==5)//query su movimenti x recupero fornitore { select << "USE RMOVANA KEY 2\n" << "SELECT ((CODCMS == '" << commessa << "')&&(CODCONTO='003071000002')) \n"; join << "JOIN MOVANA TO RMOVANA INTO NUMREG==NUMREG \n" << "JOIN MOV TO MOVANA INTO NUMREG=NUMREGCG \n" << "JOIN CLIFO TO MOV INTO TIPOCF==TIPO CODCF==CODCF \n" << "FROM CODCONTO='003071000002' \n" << "TO CODCONTO='003071000002' \n"; } TString& query = get_tmp_string(); query << select << between << order_by << join; return query; } class TRiepCarrelli: public TArray { public: void add(const TString& articolo, TString user[], TDate dataDoc, const TString& numDoc, TCurrency importob, TDate data_gara, TCurrency prezzoAcq,TString descrAcq, TString modello,TCurrency noleggio,TCurrency revisione, TCurrency manutenzione, TString venduto_a, TCurrency prezzoVend, TCurrency prezzo_p1, TCurrency prezzo_autom, TCurrency prezzo_recup); }; void TRiepCarrelli::add(const TString& articolo,TString user[],TDate dataDoc, const TString& numDoc, TCurrency importob, TDate data_gara, TCurrency prezzoAcq,TString descrAcq, TString modello,TCurrency noleggio, TCurrency revisione, TCurrency manutenzione, TString venduto_a, TCurrency prezzoVend, TCurrency prezzo_p1, TCurrency prezzo_autom, TCurrency prezzo_recup) { TStruttura_carrelli* struttura = new TStruttura_carrelli( articolo,user,dataDoc,numDoc,importob,data_gara, prezzoAcq,descrAcq,modello, noleggio, revisione, manutenzione, venduto_a,prezzoVend,prezzo_p1,prezzo_autom, prezzo_recup); TArray::add(struttura); } //metodo principale di elaborazione void TCarrelli_app::elabora(const TMask& mask)const { bool search = true; const bool venduto = mask.get_bool(F_VENDUTO); if(!venduto && !mask.field(F_COD_CMS).empty() && mask.get(F_COD_CMS)==mask.get(F_COD_CMS_TO)) { TISAM_recordset carico(get_query(0,true)); //inserire parametri filtri carico.set_var("#FROM",TVariant(mask.get(F_COD_CMS)));// carico.set_var("#TO",TVariant(mask.get(F_COD_CMS_TO)));// carico.set_var("#F_VEN",TVariant(mask.get(F_VENDUTO)));// carico.set_var("#F_CAR",TVariant(mask.get(F_CARICO)));// for(bool ok = carico.move_first();ok;ok=carico.move_next()) { search = warning_box (TR("Attenzione:Il carrello risulta venduto!")); break; } } if (search) { TISAM_recordset riep(get_query(0,venduto)); //inserire parametri filtri riep.set_var("#FROM", mask.get(F_COD_CMS)); riep.set_var("#TO", mask.get(F_COD_CMS_TO)); riep.set_var("#F_VEN", mask.get(F_VENDUTO)); riep.set_var("#F_CAR", mask.get(F_CARICO)); TRiepCarrelli riepilogo; //inizializzazione variabili da utilizzare nella struttura TString articolo; TString user[14]; TString campo; TString16 numDoc; TDate dataDoc; TDate data_gara; TString descr_conto; TString conto; TString modello; TString descr_null; TCurrency importob; TCurrency prezzoAcq; TString venduto_a; TCurrency prezzoVend; TCurrency noleggio; TCurrency manutenzione, revisione; TCurrency prezzo_null; TString commessa, commessaOld; TProgind pi(riep.items(), title()); for (bool ok = riep.move_first();ok;ok=riep.move_next()) { if (!pi.addstatus(1)) break; commessa = riep.get("SALDANA.COMMESSA").as_string(); articolo = riep.get("ANAMAG.CODART").as_string();//A if(commessa==commessaOld || commessa.empty() || articolo.empty()) continue; commessaOld=commessa; if (!venduto) { TISAM_recordset carico(get_query(0,true)); //inserire parametri filtri carico.set_var("#FROM",commessa);// carico.set_var("#TO",commessa);// carico.set_var("#F_VEN",TVariant(mask.get(F_VENDUTO)));// carico.set_var("#F_CAR",TVariant(mask.get(F_CARICO)));// if (carico.move_first()) continue; } //if(articolo.not_empty()) { for(int a = 0; a<14; a++) //da B a N { campo = "ANAMAG.USER"; campo << (a+1); user[a] = riep.get(campo).as_string(); } dataDoc= "";//O TISAM_recordset bolle(get_query(1)); bolle.set_var("#COMM",TVariant(articolo)); if (bolle.move_last()) { dataDoc= bolle.get("DOC.DATADOC").as_date(); numDoc = bolle.get("DOC.NDOC").as_string(); } importob = riep.get("COMMESSE.IMPORTOB").as_real();//P data_gara = riep.get("COMMESSE.DATAGARA").as_string();//Q modello = riep.get("COMMESSE.DESCRIZ").as_string();//T prezzoAcq= ZERO; //R conto=""; TISAM_recordset saldana(get_query(2)); saldana.set_var("#COMM",TVariant(articolo)); for(bool ok3 = saldana.move_first();ok3;ok3=saldana.move_next()) { prezzoAcq += saldana.get("SALDANA.SALDO").as_real(); conto = saldana.get("SALDANA.CONTO").as_string(); } /*if(conto.not_empty()) { gruppo1 = atoi(conto.sub(0,3)); conto1 = atoi(conto.sub(3,6)); sottoGruppo1 = atoi(conto.sub(6)); TISAM_recordset pconto(get_query(3)); pconto.set_var("#GRUPPO1",TVariant(long (gruppo1)));// pconto.set_var("#CONTO1",TVariant(long (conto1)));// pconto.set_var("#SOTTOCONTO1",TVariant(long (sottoGruppo1)));// for(bool ok3 = pconto.move_first();ok3;ok3=pconto.move_next()) { descr_conto = pconto.get("PCON.DESCR").as_string(); break; } }*/ //RECUPERO FORNITORE descr_conto=descr_null;//S TISAM_recordset fornitore(get_query(5,false,commessa)); if (fornitore.move_last()) { if (fornitore.get("MOVANA.NUMREGCG").as_int() > 0) descr_conto = fornitore.get("CLIFO.RAGSOC").as_string(); } //NOLEGGIO noleggio = ZERO; //U TISAM_recordset noleg(get_query_saldana("004076000004")); noleg.set_var("#COMM",TVariant(articolo)); for(bool ok2 = noleg.move_first();ok2;ok2=noleg.move_next()) { noleggio = noleggio + noleg.get("SALDANA.SALDO").as_real(); } //MANUTENZIONE revisione = manutenzione = ZERO; TString query; query << "USE RMOVANA KEY 4 SELECT CODCONTO='003071000003'" << "\nJOIN MOVANA INTO NUMREG==NUMREG" << "\nFROM CODCMS=#COMM\nTO CODCMS=#COMM"; TISAM_recordset manut2(query); manut2.set_var("#COMM", articolo); for(bool ok2 = manut2.move_first();ok2;ok2=manut2.move_next()) { const TString& dacodnum = manut2.get("MOVANA.DCODNUM").as_string(); const long numreg = manut2.get("MOVANA.NUMREG").as_int(); const real imp = manut2.get(RMOVANA_IMPORTO).as_real(); if (dacodnum == "PREV") revisione += imp; else manutenzione += imp; } /* Scaletta per il recupero del venduto: 1) user1 prelevato da anamag 2) se esiste su SALDANA con il conto 004 076 000003(Venduto) 3) controllo su multirel se si tratta di un cespite 4) se esiste su SALDANA con il conto 003 071 000002 (acquistato) 5) se esiste su SALDANA con il conto 003 081 000043 sino al 003 081 999999 (leasing) */ venduto_a = user[0];//W prezzoVend = ZERO;//X if (venduto_a.empty()) { //VENDUTO TISAM_recordset saldana(get_query_saldana("004076000003")); saldana.set_var("#COMM",TVariant(articolo)); for(bool ok2 = saldana.move_last(); ok2; ok2=saldana.move_next()) { venduto_a = "VENDUTO"; prezzoVend += saldana.get("SALDANA.SALDO").as_real(); } if(venduto_a.empty()) { //CESPITE TISAM_recordset cespite(get_query(4)); cespite.set_var("#COMM",TVariant(articolo)); for(bool ok2 = cespite.move_last(); ok2; ok2=cespite.move_next()) { venduto_a = "CESPITE"; break; } } if(venduto_a.empty()) { //ACQUISTATO TISAM_recordset acquistato(get_query_saldana("003071000002")); acquistato.set_var("#COMM",TVariant(articolo)); for(bool ok2 = acquistato.move_last();ok2;ok2=acquistato.move_next()) { venduto_a = "ACQUISTATO"; break; } } if(venduto_a.empty()) { //LEASING TISAM_recordset leasing(get_query_saldana("?=","003081*")); leasing.set_var("#COMM",TVariant(articolo)); for(bool ok2 = leasing.move_last();ok2;ok2=leasing.move_next()) { venduto_a = "LEASING"; break; } } } const TCurrency prezzo_p1 = (prezzoAcq + revisione+manutenzione)*1.1;//Y const TCurrency prezzo_autom(real(prezzo_p1.get_num() * 1.2 - noleggio.get_num()*0.8)); //Z //const TCurrency prezzo_recup = noleggio - prezzoVend - prezzo_p1; //AB Vecchio modo const TCurrency prezzo_recup = prezzoVend + noleggio - prezzo_p1; //AB Nuovo modo riepilogo.add(articolo,user,dataDoc,numDoc,importob,data_gara, prezzoAcq,descr_conto,modello, noleggio,revisione,manutenzione,venduto_a,prezzoVend, prezzo_p1, prezzo_autom,prezzo_recup); prezzoAcq = prezzo_null; manutenzione = revisione = prezzo_null; noleggio = prezzo_null; prezzoVend = prezzo_null; } } //gestione report TCarrelli_report rep; TCarrelli_recordset* riep_set = (TCarrelli_recordset*)rep.recordset(); //scandisce clienti e tiene buoni solo quelli valorizzati FOR_EACH_ARRAY_ITEM(riepilogo,c,obj) { const TStruttura_carrelli& s = *(TStruttura_carrelli*)obj; riep_set->new_rec(); int colonna = 0; riep_set->set(colonna,s._articolo);//A colonna++; riep_set->set(colonna,s._user1);//B colonna++; riep_set->set(colonna,s._user2);//C colonna++; riep_set->set(colonna,s._user3);//D colonna++; riep_set->set(colonna,s._user4);//E colonna++; riep_set->set(colonna,s._user5);//F colonna++; riep_set->set(colonna,s._user6);//G colonna++; riep_set->set(colonna,s._user7);//H colonna++; riep_set->set(colonna,s._user8);//I colonna++; riep_set->set(colonna,s._user9);//J colonna++; riep_set->set(colonna,s._user10);//K colonna++; riep_set->set(colonna,s._user11);//L colonna++; riep_set->set(colonna,s._user12);//M colonna++; riep_set->set(colonna,s._user13);//N colonna++; riep_set->set(colonna,s._data_doc);//O colonna++; riep_set->set(colonna,s._importob.get_num());//P colonna++; riep_set->set(colonna,s._data_gara);//Q colonna++; riep_set->set(colonna,s._prezzoAcq.get_num());//R colonna++; riep_set->set(colonna,s._descr_conto);//S colonna++; riep_set->set(colonna,s._modello);//T colonna++; riep_set->set(colonna,s._noleggio.get_num());//U colonna++; riep_set->set(colonna,s._manutenzione.get_num());//V colonna++; riep_set->set(colonna,s._venduto_a);//W colonna++; riep_set->set(colonna,s._prezzo_vend.get_num());//X colonna++; riep_set->set(colonna,s._prezzo_p1.get_num());//Y colonna++; riep_set->set(colonna,s._prezzo_autom.get_num());//Z colonna++; riep_set->set(colonna,s._user14);//AA colonna++; riep_set->set(colonna,s._prezzo_recup.get_num());//AB colonna++; riep_set->set(colonna,s._revisione.get_num());//AC colonna++; riep_set->set(colonna,s._num_doc);//AD colonna++; } //Crea file che contiene il recordset //riep_set->save_as("c:\\riepilogoBolla.txt"); //carica tutte le variabili del report. rep.mask2report(mask); TReport_book b; bool ok = b.add(rep);// Richiede parametri di stampa in base alla maschera omonima if (ok) { //Se esiste almeno 1 pagina if (b.pages() > 0) b.print_or_preview(); // Stampa effettivamente else warning_box (TR("Nessun record estratto per i parametri inseriti")); } } } void TCarrelli_app::main_loop() { TCarrelli_mask mask; //Setto come check iniziale il venduto a Si mask.set("#F_VEN","X"); while (mask.run()==K_ENTER) { elabora(mask); } } int pd5317100(int argc, char* argv[]) { TCarrelli_app app; app.run(argc, argv, TR("Stampa Listino Carrelli")); return 0; }