diff --git a/ca/ca3.cpp b/ca/ca3.cpp index fd8d7e3fe..bdb134dc5 100755 --- a/ca/ca3.cpp +++ b/ca/ca3.cpp @@ -11,7 +11,7 @@ int main(int argc, char** argv) case 2: ca3300(argc, argv); break; // stampa bilancio //case 3: ca3400(argc, argv); break; // stampa conti per CdC/Commessa/Fase //case 4: ca3500(argc, argv); break; // stampa scheda CdC/Commessa/Fase - //case 5: ca3600(argc, argv); break; // stampa pagato per CdC/Commessa/Fase + case 5: ca3600(argc, argv); break; // stampa pagato per CdC/Commessa/Fase case 6: ca3700(argc, argv); break; //stampa rendiconto case 8: ca3900(argc, argv); break; // generazione movimenti perfetti ma casuali default: ca3100(argc, argv); break; // stampa movimenti diff --git a/ca/ca3.h b/ca/ca3.h index c31cf2496..dc0bb6f84 100755 --- a/ca/ca3.h +++ b/ca/ca3.h @@ -6,7 +6,7 @@ int ca3200(int argc, char* argv[]); int ca3300(int argc, char* argv[]); //int ca3400(int argc, char* argv[]); //int ca3500(int argc, char* argv[]); -//int ca3600(int argc, char* argv[]); +int ca3600(int argc, char* argv[]); int ca3700(int argc, char* argv[]); int ca3900(int argc, char* argv[]); diff --git a/ca/ca3600.cpp b/ca/ca3600.cpp new file mode 100755 index 000000000..6be09900a --- /dev/null +++ b/ca/ca3600.cpp @@ -0,0 +1,507 @@ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "..\cg\cgsaldac.h" +#include "..\cg\cg2103.h" +#include "..\ve\velib.h" + +#include "panapdc.h" +#include "pconana.h" +#include "movana.h" +#include "rmovana.h" + +#include "ca3.h" +#include "ca3600.h" +#include "ca3601.h" +#include "calib01.h" +#include "calib02.h" + +//=============================================================================================== +//////////////////////////////////////////////////////// +// MASCHERA DI CONFIGURAZIONE +//////////////////////////////////////////////////////// + +class TPag_per_cms_configmask: public TAutomask +{ +public: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + void config_loader(TSheet_field& sf, const char* paragrafo); + void config_setter(TSheet_field& sf, const char* paragrafo); + + TPag_per_cms_configmask():TAutomask("ca3601") + { + config_loader(sfield(F_COSTI), "Costi"); + config_loader(sfield(F_PAGAMENTI), "Pagamenti"); + config_loader(sfield(F_RITFIS), "Fiscali"); + config_loader(sfield(F_RITSOC), "Sociali"); + } + +}; + +bool TPag_per_cms_configmask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case DLG_SAVEREC: + { + config_setter(sfield(F_COSTI), "Costi"); + config_setter(sfield(F_PAGAMENTI), "Pagamenti"); + config_setter(sfield(F_RITFIS), "Fiscali"); + config_setter(sfield(F_RITSOC), "Sociali"); + } + break; + default: + break; + } + return true; +} + +void TPag_per_cms_configmask::config_loader(TSheet_field& sf, const char* paragrafo) +{ + TConfig config("ca3600.ini", paragrafo); + TString_array conti; + + int n = config.list_variables(conti, true, paragrafo, true); + FOR_EACH_ARRAY_ROW(conti, i, row) + { + TToken_string conto(row->get(1), '.'); //prende il valore della riga + TBill uncle(conto, 0); + uncle.add_to(sf.row(i), 0, 0x2); + } +} + +void TPag_per_cms_configmask::config_setter(TSheet_field& sf, const char* paragrafo) +{ + TConfig config("ca3600.ini", paragrafo); + + config.remove_all(); //svuota il paragrafo sul .ini prima di ricompilarlo (se non si facesse + //non si riuscirebbero ad ammazzare le righe sul .ini + FOR_EACH_SHEET_ROW (sf, i, row) + { + TToken_string conto("", '.'); + conto.add(row->get(0)); + conto.add(row->get(1)); + conto.add(row->get(2)); + + config.set("conto", conto, NULL, true, i); + } +} + + +//=============================================================================================== +//////////////////////////////////////////////////////// +// MASCHERA PRINCIPALE +//////////////////////////////////////////////////////// + +class TPag_per_cms_mask: public TAnal_report_mask +{ +protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + const TString& get_report_class() const; + bool test_compatible_report(); + bool esistono_riclassificazioni() const; + +public: + TPag_per_cms_mask(); + virtual ~TPag_per_cms_mask() {} + +}; + +const TString& TPag_per_cms_mask::get_report_class() const +{ + TString& classe = get_tmp_string(); + classe = "ca3600a"; + return classe; +} + +bool TPag_per_cms_mask::test_compatible_report() +{ + const TString& cls = get_report_class(); + const TString& name = get(F_REPORT); + bool ok = name.not_empty(); + if (ok) + { + TReport rep; + ok = rep.load(name); + if (ok) + { + const TString& classe = rep.get_class(); + ok = classe == cls; + } + } + if (!ok) + { + set(F_REPORT, cls); + TFilename path = cls; + path.ext("rep"); + ok = path.custom_path(); + } + return ok; +} + +bool TPag_per_cms_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case DLG_CONFIG: + if (e == fe_button) + { + TPag_per_cms_configmask configmask; //lancia la maschera di configurazione + configmask.run(); + } + break; + case F_REPORT: + if (e == fe_button) + { + const TString8 lib = get_report_class(); + TFilename path = o.get(); + if (select_custom_file(path, "rep", lib)) + { + path = path.name(); + path.ext(""); + o.set(path); + } + } else + if (e == fe_close) + { + if (!test_compatible_report()) + return error_box(TR("Impossibile trovare un report compatibile")); + } + break; + case F_PRE1: + case F_PRE2: + case F_PRE3: + if ((e == fe_init || e == fe_modify) && o.active()) + { + const int k = o.dlg()-F_PRE1; + set(F_PAN1_INI + k, o.get(), 0x2); + disable(F_PAN1_INI + k); + disable(F_PANDES1_INI + k); + + set(F_PAN1_FIN + k, o.get(), 0x2); + disable(F_PAN1_FIN + k); + disable(F_PANDES1_FIN + k); + } + break; + default: + break; + } + return TAnal_report_mask::on_field_event(o, e, jolly); +} + +bool TPag_per_cms_mask::esistono_riclassificazioni() const +{ + TLocalisamfile ric(LF_PANAPDC); + return ric.first() == NOERR; +} + +TPag_per_cms_mask::TPag_per_cms_mask() + :TAnal_report_mask("ca3600") +{ + TConfig& cfg = ca_config(); + const bool use_pdcc = cfg.get_bool("UsePdcc"); + + const TMultilevel_code_info& pconana_info = ca_multilevel_code_info(LF_PCONANA); + const int pconana_levels = pconana_info.levels(); + + int pconana_prefix = cfg.get_int("PdcPrefix"); + if (pconana_prefix >= pconana_levels) + pconana_prefix = pconana_levels-1; + + disable(F_PIANO); + set(F_PIANO, use_pdcc ? "C" : "A"); + + // Controllo se voglio (e posso) usare il conto analitico come prefisso di quello contabile + const int pref = cfg.get_int("PdcPrefix"); + if (use_pdcc && pref > 0) + { + const TMultilevel_code_info& info = ca_multilevel_code_info(LF_PCONANA); + const int levels = info.levels(); + if (levels >= 2 && pref < levels && esistono_riclassificazioni()) + { + enable(F_PIANO); + ca_create_fields(*this, 1, LF_PCONANA, 2, 4, F_PRE1, F_PREDES1, 0x0, PCONANA_CODCONTO); + + // Nascondi i campi che non fanno parte del prefisso + for (int i = 0; i < levels; i++) + { + if (i < pref) + { + field(F_PRE1 + i).check_type(CHECK_REQUIRED); + field(F_PRE1 + i).set_group(6); + field(F_PREDES1 + i).set_group(6); + } + else + { + field(F_PRE1 + i).hide(); + field(F_PREDES1 + i).hide(); + } + } + } + } + + for (int g = 5; g <= 6; g++) + { + const int logicnum = g == 5 ? LF_PCON : LF_PCONANA; + const short da_dlg = g == 5 ? F_PDC1_INI : F_PAN1_INI; + const short da_des = g == 5 ? F_PDCDES1_INI : F_PANDES1_INI; + const short a_dlg = g == 5 ? F_PDC1_FIN : F_PAN1_FIN; + const short a_des = g == 5 ? F_PDCDES1_FIN : F_PANDES1_FIN; + + const int nfields = ca_create_fields(*this, 1, logicnum, 2, 10, da_dlg, da_des, 0x0, PCONANA_CODCONTO); + ca_create_fields(*this, 1, logicnum, 2, 16, a_dlg, a_des, 0x0, PCONANA_CODCONTO); + + for (int i = 0; i < nfields; i++) + { + TMask_field& daconto = field(da_dlg + i); + daconto.set_group(1); + daconto.set_group(4); + daconto.set_group(g); + daconto.check_type(CHECK_SEARCH); + + field(da_des+i).set_group(4); + field(da_des+i).set_group(g); + + TMask_field& aconto = field(a_dlg + i); + aconto.set_group(2); + aconto.set_group(4); + aconto.set_group(g); + aconto.check_type(CHECK_SEARCH); + + field(a_des+i).set_group(4); + field(a_des+i).set_group(g); + } + } +} + + +/////////////////////////////////////////////////////////////// +// RECORDSET +/////////////////////////////////////////////////////////////// +class TPag_per_cms_recordset : public TISAM_recordset +{ + TExternisamfile* _tmp; + bool _riclassificato; +// TString _prefix, _da_conto_riclas, _a_conto_riclas; + +protected: +// int _anno; +// int _tipoconti; +// TDate _dadata, _adata; +// long _danumreg, _anumreg; + TString _daconto, _aconto, _codcosto, _codcms, _codfas; + +protected: //da libreria +// virtual const TVariant& get(const char* column_name) const; + +protected: + void crea_trr(const TFilename& trr) const; + +public: + virtual void set_filter(const TPag_per_cms_mask& msk, int cms_row); + + TPag_per_cms_recordset(const TString& sql) : TISAM_recordset(sql), _riclassificato(false) { _tmp = NULL;} + ~TPag_per_cms_recordset(); +}; + + +static TPag_per_cms_recordset* myself = NULL; + +TPag_per_cms_recordset::~TPag_per_cms_recordset() +{ } + + +void TPag_per_cms_recordset::crea_trr(const TFilename& trr) const +{ + ofstream of(trr); + of << 1000 << endl; + of << 14 << endl; + of << "NREG|3|7|0|Numero registrazione" << endl; + of << "DATAPAG|5|8|0|Data pagamento" << endl; + of << "DESCRPAG|1|50|0|Descrizione pagamento" << endl; + of << "CONTO|1|20|0|Conto analitico/contabile" << endl; + of << "DESCONTO|1|50|0|Descrizione conto" << endl; + of << "NDOC|1|6|0|Numero documento" << endl; + of << "DATADOC|5|8|0|Data documento" << endl; + of << "PROT|2|5|0|Protocollo iva" << endl; + of << "TOTDOC|4|18|5|Totale documento" << endl; + of << "TOTPAG|4|18|5|Totale pagamento" << endl; + of << "TOTRES|4|18|5|Totale residuo" << endl; + of << "CODFORN|3|7|0|Codice fornitore" << endl; + of << "DESFORN|1|50|0|Descrizione fornitore" << endl; + of << "HIDDEN|8|1|0|Record nascosto" << endl; + of << 1 << endl; + of << "NREG+DATAPAG" << endl; +} + +void TPag_per_cms_recordset::set_filter(const TPag_per_cms_mask& msk, int cms_row) +{ + //se esiste il file temporano con tracciato persomalizzato lo cancella e lo ricrea vuoto + TFilename trr; //file tracciato record + trr.tempdir(); + trr.add("paid"); + TFilename dbf(trr); //file dati + + trr.ext("trr"); + dbf.ext("dbf"); + + //crea il file .trr in base ai parametri del metodo + crea_trr(trr); + //svuota la memoria dal vecchio file temporaneo + if (_tmp != NULL) + delete _tmp; + + //crea in memoria il nuovo file temporaneo e lo azzera (non si sa mai..) + _tmp = new TExternisamfile(dbf, trr); + _tmp->zap(); + //prende un po' di dati dalla maschera + _daconto, _aconto, _codcosto = _codcms = _codfas = ""; + if (cms_row >= 0) + { + TSheet_field& sf = msk.sfield(F_RIGHE); + TMask& sm = sf.sheet_mask(); + sf.update_mask(cms_row); + TRelation rel(LF_RMOVANA); + sm.autosave(rel); + _codcosto = rel.curr().get(RMOVANA_CODCCOSTO); + _codcms = rel.curr().get(RMOVANA_CODCMS); + _codfas = rel.curr().get(RMOVANA_CODFASE); + } + + for (int i = 0; msk.id2pos(F_CDC1_INI+i) > 0; i++) + { + _daconto << msk.get(F_CDC1_INI+i); + _aconto << msk.get(F_CDC1_FIN+i); + } +} + +//////////////////////////////////////////////////////// +// REPORT +//////////////////////////////////////////////////////// +class TPag_per_cms_rep : public TAnal_report +{ + +protected: + virtual bool set_recordset(const TString& sql); + virtual bool get_usr_val(const TString& name, TVariant& var) const; + +public: + void set_filter(const TPag_per_cms_mask& msk, int cms_row); +}; + +bool TPag_per_cms_rep::get_usr_val(const TString& name, TVariant& var) const +{ + return TAnal_report::get_usr_val(name, var); +} + +bool TPag_per_cms_rep::set_recordset(const TString& sql) +{ + TPag_per_cms_recordset* rs = new TPag_per_cms_recordset(sql); + return TAnal_report::set_recordset(rs); +} + +void TPag_per_cms_rep::set_filter(const TPag_per_cms_mask& msk, int cms_row) +{ + TAnal_report::set_recordset(NULL); + + const char* query ="USE 1000"; //\nJOIN MOVANA INTO NUMREG==NUMRD\nJOIN RMOVANA INTO NUMREG==NUMRD NUMRIG==NRIGA"; + + TPag_per_cms_recordset* recset = new TPag_per_cms_recordset(query); + + recset->set_filter(msk, cms_row); + TAnal_report::set_recordset(recset); +} + + +//=============================================================================================== +//////////////////////////////////////////////////////// +// APPLICAZIONE +//////////////////////////////////////////////////////// + +class TPag_per_cms : public TSkeleton_application +{ +public: + const TMultilevel_code_info& get_level_one() const; + virtual void main_loop(); +}; + +//metodo per accattarsi o' primo livello della configurazione CA +const TMultilevel_code_info& TPag_per_cms::get_level_one() const +{ + TConfig& cfg = ca_config(); + const TString& first_lev = cfg.get("Level(1)"); + const int logic = first_lev == "CDC" ? LF_CDC : LF_COMMESSE; + return ca_multilevel_code_info(logic); +} + +void TPag_per_cms::main_loop() +{ + TPag_per_cms_mask mask; + while (mask.run() == K_ENTER) + { + //report e book dei report + TReport_book book; + TString path = mask.get(F_REPORT); + if (path.empty()) + path = "ca3600a"; + TPag_per_cms_rep rep; + rep.load(path); + + TSheet_field& sheet = mask.sfield(F_RIGHE); + TString video_string; //stringa che compare nella progind + if (sheet.empty()) //se non ci sono righe sullo sheet (selezione su tutte le cms/cdc)... + { + TToken_string& row = sheet.row(-1); //crea la prima riga dello sheet + + const TMultilevel_code_info& liv1 = get_level_one(); //stabilisce quale è il primo livello (tra CDC e CMS).. + TISAM_recordset set(liv1.logic() == LF_CDC ? "USE CDC" : "USE COMMESSE"); //..e di conseguenza scrive la use giusta + + TProgind pi(set.items(), video_string, true, true); + for (int i = 0; set.move_to(i); i++) //fighissimo metodo per scandire un file in 1 riga! + { + pi.addstatus(1); + if (pi.iscancelled()) + break; + row = set.get((unsigned int)0).as_string(); //prende il valore del primo campo del file (CDC o CMS code) + + video_string = TR("Scansione"); + video_string << " " << row; //completa la stringa da visualizzare sulla progind + pi.set_text(video_string); + + for (int l = liv1.levels()-2; l >= 0; l--) //se la struttura è a più livelli costruisce la tokenstring + row.insert("|", liv1.total_len(l)); + + rep.set_filter(mask, 0); //fa la set filter sulla prima riga (che è quella usata) + book.add(rep); + } + sheet.destroy(); //cancella le commesse aggiunte in automatico sullo sheet + } + else //se ha almeno una riga sullo sheet delle cms/cdc... + { + FOR_EACH_SHEET_ROW(sheet, r, row) //per ogni cdc/cms che appare nello sheet di pag.1 della msk.. + { + rep.set_filter(mask, r); //..chiama il metodone globale che crea e compila il file.. + //..temporaneo i cui dati riempiranno il report + book.add(rep); //aggiunge il report relativo alla cdc/cms corrente al book + } + } + + book.print_or_preview(); //stampa il book dei report + } +} + +int ca3600(int argc, char* argv[]) +{ + TPag_per_cms a; + a.run(argc,argv,TR("Stampa pagato per commessa")); + return 0; +} diff --git a/ca/ca3600.h b/ca/ca3600.h new file mode 100755 index 000000000..c565ef379 --- /dev/null +++ b/ca/ca3600.h @@ -0,0 +1,62 @@ +// campi per la maschera ca3600 +#ifndef __CA3600_H +#define __CA3600_H + +#define F_TIPODATA 200 +#define F_DATAINI 201 +#define F_DATAFIN 202 +#define F_DACODFOR 203 +#define F_DADESFOR 204 +#define F_ACODFOR 205 +#define F_ADESFOR 206 +#define F_ORDINAMENTO 207 +#define F_REPORT 208 + +//campi generati dal pdc +#define F_CDC1_INI 206 +#define F_CDC4_INI 209 +#define F_CDC1_FIN 216 +#define F_CDC4_FIN 219 +#define F_DES1_INI 226 +#define F_DES4_INI 229 +#define F_DES1_FIN 236 +#define F_DES4_FIN 239 + +//sheet e righe relative +#define F_RIGHE 260 + +//campi generati dai piani dei conti +#define F_PIANO 319 +#define F_PRE0 320 +#define F_PRE1 321 +#define F_PRE2 322 +#define F_PRE3 323 +#define F_PREDES1 325 +#define F_PREDES2 326 +#define F_PREDES3 327 + +#define F_PDC0_INI 330 +#define F_PDC1_INI 331 +#define F_PDC4_INI 334 +#define F_PDCDES1_INI 335 +#define F_PDCDES4_INI 338 + +#define F_PDC0_FIN 340 +#define F_PDC1_FIN 341 +#define F_PDC4_FIN 344 +#define F_PDCDES1_FIN 345 +#define F_PDCDES4_FIN 348 + +#define F_PAN0_INI 350 +#define F_PAN1_INI 351 +#define F_PAN4_INI 354 +#define F_PANDES1_INI 355 +#define F_PANDES4_INI 358 + +#define F_PAN0_FIN 360 +#define F_PAN1_FIN 361 +#define F_PAN4_FIN 364 +#define F_PANDES1_FIN 365 +#define F_PANDES4_FIN 368 + +#endif // __CA3600_H \ No newline at end of file diff --git a/ca/ca3600.uml b/ca/ca3600.uml new file mode 100755 index 000000000..ec1a211d1 --- /dev/null +++ b/ca/ca3600.uml @@ -0,0 +1,298 @@ +#include "ca3600.h" +#include "camask.h" + +TOOLBAR "" 0 -3 0 3 + +STRING DLG_PROFILE 50 +BEGIN + PROMPT 9 0 "Profilo " + PSELECT +END + +BUTTON DLG_PRINT 10 2 +BEGIN + PROMPT -13 -1 "~Stampa" + MESSAGE EXIT,K_ENTER +END + +BUTTON DLG_CONFIG 10 2 +BEGIN + PROMPT -23 -1 "~Configura" + PICTURE BMP_CONFIG +END + +BUTTON DLG_QUIT 10 2 +BEGIN + PROMPT -33 -1 "" +END + +ENDPAGE + +PAGE "CdC/Cms/Fasi / Date / Fornitori" -1 -1 78 20 + +SPREADSHEET F_RIGHE -1 -13 +BEGIN + PROMPT 1 1 "Centro di Costo / Commessa / Fase" + ITEM "Cdc1" + ITEM "Cdc2" + ITEM "Cdc3" + ITEM "Cdc4" + ITEM "Cdc5" + ITEM "Cdc6" + ITEM "Cdc7" + ITEM "Cdc8" + ITEM "Cdc9" + ITEM "Cdc10" + ITEM "Cdc11" + ITEM "Cdc12" +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 9 "@bEstrazione per data di: " +END + +RADIOBUTTON F_TIPODATA 76 +BEGIN + PROMPT 2 9 "" + ITEM "0|Registrazione" + ITEM "1|Documento" + ITEM "2|Pagamento" + FLAGS "Z" +END + +DATE F_DATAINI +BEGIN + PROMPT 2 11 "Dalla data " +END + +DATE F_DATAFIN +BEGIN + PROMPT 25 11 "Alla data " + VALIDATE DATE_CMP_FUNC >= F_DATAINI + WARNING "La data finale deve essere successiva a quella iniziale" +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 13 "@bSelezione fornitori" +END + +NUMBER F_DACODFOR 6 +BEGIN + PROMPT 2 14 "Da codice " + USE LF_CLIFO KEY 1 + FLAGS "U" + INPUT TIPOCF "F" + INPUT CODCF F_DACODFOR + DISPLAY "Codice " CODCF + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT F_DACODFOR CODCF + OUTPUT F_DADESFOR RAGSOC + CHECKTYPE NORMAL +END + +STRING F_DADESFOR 50 +BEGIN + PROMPT 23 14 "" + USE LF_CLIFO KEY 2 + INPUT TIPOCF "F" + INPUT RAGSOC F_DADESFOR + DISPLAY "Ragione sociale@50" RAGSOC + DISPLAY "Codice " CODCF + COPY OUTPUT F_DACODFOR + CHECKTYPE NORMAL +END + +NUMBER F_ACODFOR 6 +BEGIN + PROMPT 2 15 "A codice " + COPY USE F_DACODFOR + FLAGS "U" + INPUT TIPOCF "F" + INPUT CODCF F_ACODFOR + COPY DISPLAY F_DACODFOR + OUTPUT F_ACODFOR CODCF + OUTPUT F_ADESFOR RAGSOC + CHECKTYPE NORMAL + NUM_EXPR (#F_ACODFOR==0)||(#F_ACODFOR>=#F_DACODFOR) + WARNING "Il codice fornitore finale non puo' essere inferiore a quello iniziale" +END + +STRING F_ADESFOR 50 +BEGIN + PROMPT 23 15 "" + COPY USE F_DADESFOR + INPUT TIPOCF "F" + INPUT RAGSOC F_ADESFOR + COPY DISPLAY F_DADESFOR + COPY OUTPUT F_ACODFOR + CHECKTYPE NORMAL +END + +RADIOBUTTON F_ORDINAMENTO 1 40 +BEGIN + PROMPT 1 17 "@bTipo ordinamento" + ITEM " |Commessa" + ITEM "X|Fornitore" + FLAGS "Z" +END + +STRING F_REPORT 256 64 +BEGIN + PROMPT 2 20 "Report " + FLAGS "B" + CHECKTYPE REQUIRED +END + +ENDPAGE + +PAGE "Conti" -1 -1 78 20 + +LIST F_PIANO 1 12 +BEGIN + PROMPT 1 1 "Piano dei conti " + ITEM "A|Analitico" + MESSAGE HIDE,5@|SHOW,6@ + ITEM "C|Contabile" + MESSAGE HIDE,6@|SHOW,5@ +END + +GROUPBOX F_PRE0 76 6 +BEGIN + PROMPT 1 3 "@bPrefisso del piano dei conti analitico:" + GROUP 6 +END + +GROUPBOX F_PDC0_INI 76 6 +BEGIN + PROMPT 1 9 "@bDa conto:" + GROUP 4 +END + +GROUPBOX F_PDC0_FIN 76 6 +BEGIN + PROMPT 1 15 "@bA conto:" + GROUP 4 +END + +ENDPAGE + +ENDMASK + +PAGE "Riga Analitica" -1 -1 78 19 + +STRING S_CDC1 20 +BEGIN + PROMPT 1 2 "Cdc1" + FLAGS "B" + CHECKTYPE NORMAL + GROUP 1 +END + +STRING S_CDC2 20 +BEGIN + PROMPT 21 2 "Cdc2" + FLAGS "B" + CHECKTYPE NORMAL + GROUP 1 +END + +STRING S_CDC3 20 +BEGIN + PROMPT 41 2 "Cdc3" + FLAGS "B" + CHECKTYPE NORMAL + GROUP 1 +END + +STRING S_CDC4 20 +BEGIN + PROMPT 61 2 "Cdc4" + FLAGS "B" + CHECKTYPE NORMAL + GROUP 1 +END + +STRING S_CDC5 20 +BEGIN + PROMPT 1 3 "Cdc5" + FLAGS "B" + CHECKTYPE NORMAL + GROUP 1 +END + +STRING S_CDC6 20 +BEGIN + PROMPT 21 3 "Cdc6" + FLAGS "B" + CHECKTYPE NORMAL + GROUP 1 +END + +STRING S_CDC7 20 +BEGIN + PROMPT 41 3 "Cdc7" + FLAGS "B" + CHECKTYPE NORMAL + GROUP 1 +END + +STRING S_CDC8 20 +BEGIN + PROMPT 61 3 "Cdc8" + FLAGS "B" + CHECKTYPE NORMAL + GROUP 1 +END + +STRING S_CDC9 20 +BEGIN + PROMPT 1 4 "Cdc9" + FLAGS "B" + CHECKTYPE NORMAL + GROUP 1 +END + +STRING S_CDC10 20 +BEGIN + PROMPT 21 4 "Cdc10" + FLAGS "B" + CHECKTYPE NORMAL + GROUP 1 +END + +STRING S_CDC11 20 +BEGIN + PROMPT 41 4 "Cdc11" + FLAGS "B" + CHECKTYPE NORMAL + GROUP 1 +END + +STRING S_CDC12 20 +BEGIN + PROMPT 61 4 "Cdc12" + FLAGS "B" + CHECKTYPE NORMAL + GROUP 1 +END + +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -13 -1 "" +END + +BUTTON DLG_DELREC 10 2 +BEGIN + PROMPT -23 -1 "" +END + +BUTTON DLG_CANCEL 10 2 +BEGIN + PROMPT -33 -1 "" +END + +ENDPAGE + +ENDMASK diff --git a/ca/ca3601.h b/ca/ca3601.h new file mode 100755 index 000000000..73e377d33 --- /dev/null +++ b/ca/ca3601.h @@ -0,0 +1,25 @@ +// campi per la maschera ca3601 +#define F_COSTI 200 +#define F_PAGAMENTI 201 +#define F_RITFIS 202 +#define F_RITSOC 203 + +#define F_SC_GRUPPO 101 +#define F_SC_CONTO 102 +#define F_SC_SOTTOCONTO 103 +#define F_SC_DESCRIZIONE 104 + +#define F_SP_GRUPPO 101 +#define F_SP_CONTO 102 +#define F_SP_SOTTOCONTO 103 +#define F_SP_DESCRIZIONE 104 + +#define F_FI_GRUPPO 101 +#define F_FI_CONTO 102 +#define F_FI_SOTTOCONTO 103 +#define F_FI_DESCRIZIONE 104 + +#define F_SO_GRUPPO 101 +#define F_SO_CONTO 102 +#define F_SO_SOTTOCONTO 103 +#define F_SO_DESCRIZIONE 104 diff --git a/ca/ca3601.uml b/ca/ca3601.uml new file mode 100755 index 000000000..c192c4971 --- /dev/null +++ b/ca/ca3601.uml @@ -0,0 +1,414 @@ +#include "ca3601.h" + +TOOLBAR "" 0 -2 0 2 + +BUTTON DLG_SAVEREC 10 2 +BEGIN + PROMPT -12 -1 "" + PICTURE BMP_SAVEREC + PICTURE BMP_SAVERECDN +END + +BUTTON DLG_QUIT 10 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + +PAGE "Costi / Pagamenti" -1 -1 78 20 + +TEXT -1 +BEGIN + PROMPT 1 0 "@bCosti" +END + +SPREADSHEET F_COSTI 78 10 +BEGIN + PROMPT 1 1 "Costi" + ITEM "Gruppo" + ITEM "Conto" + ITEM "Sottoconto" + ITEM "Descrizione@50" +END + +TEXT -1 +BEGIN + PROMPT 1 11 "@bPagamenti" +END + +SPREADSHEET F_PAGAMENTI 78 +BEGIN + PROMPT 1 12 "Pagamenti" + ITEM "Gruppo" + ITEM "Conto" + ITEM "Sottoconto" + ITEM "Descrizione@50" +END + +ENDPAGE + + +PAGE "Ritenute Fiscali / Sociali" -1 -1 78 20 + +TEXT -1 +BEGIN + PROMPT 1 0 "@bRitenute fiscali" +END + +SPREADSHEET F_RITFIS 78 10 +BEGIN + PROMPT 1 1 "Costi" + ITEM "Gruppo" + ITEM "Conto" + ITEM "Sottoconto" + ITEM "Descrizione@50" +END + +TEXT -1 +BEGIN + PROMPT 1 11 "@bRitenute sociali" +END + +SPREADSHEET F_RITSOC 78 +BEGIN + PROMPT 1 12 "Pagamenti" + ITEM "Gruppo" + ITEM "Conto" + ITEM "Sottoconto" + ITEM "Descrizione@50" +END + +ENDPAGE + +ENDMASK + +//----------------------MOVIMENTI IVA------------------------------// +//-----------Pagina di riga dello sheet costi----------------------// + +PAGE "Riga Costo" -1 -1 66 10 + +NUMBER F_SC_GRUPPO 3 +BEGIN + PROMPT 1 2 "Gruppo " + USE LF_PCON KEY 1 SELECT (CONTO="") + INPUT GRUPPO F_SC_GRUPPO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_SC_GRUPPO GRUPPO + CHECKTYPE REQUIRED +END + +NUMBER F_SC_CONTO 3 +BEGIN + PROMPT 1 3 "Conto " + USE LF_PCON KEY 1 SELECT (SOTTOCONTO="") + INPUT GRUPPO F_SC_GRUPPO + INPUT CONTO F_SC_CONTO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_SC_CONTO CONTO + OUTPUT F_SC_GRUPPO GRUPPO + CHECKTYPE NORMAL +END + +NUMBER F_SC_SOTTOCONTO 6 +BEGIN + PROMPT 1 4 "Sottoconto " + USE LF_PCON + INPUT GRUPPO F_SC_GRUPPO + INPUT CONTO F_SC_CONTO + INPUT SOTTOCONTO F_SC_SOTTOCONTO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_SC_SOTTOCONTO SOTTOCONTO + OUTPUT F_SC_GRUPPO GRUPPO + OUTPUT F_SC_CONTO CONTO + OUTPUT F_SC_DESCRIZIONE DESCR + CHECKTYPE NORMAL +END + +STRING F_SC_DESCRIZIONE 50 +BEGIN + PROMPT 1 5 "Descrizione " + USE LF_PCON KEY 2 + INPUT DESCR F_SC_DESCRIZIONE + DISPLAY "Descrizione@50" DESCR + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + OUTPUT F_SC_SOTTOCONTO SOTTOCONTO + OUTPUT F_SC_CONTO CONTO + OUTPUT F_SC_GRUPPO GRUPPO + OUTPUT F_SC_DESCRIZIONE DESCR + CHECKTYPE NORMAL +END + +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -13 -1 "" +END + +BUTTON DLG_DELREC 10 2 +BEGIN + PROMPT -23 -1 "" +END + +BUTTON DLG_CANCEL 10 2 +BEGIN + PROMPT -33 -1 "" +END + +ENDPAGE + +ENDMASK + +//-----------Pagina di riga dello sheet pagamenti----------------------// + +PAGE "Riga Pagamento" -1 -1 66 10 + +NUMBER F_SP_GRUPPO 3 +BEGIN + PROMPT 1 2 "Gruppo " + USE LF_PCON KEY 1 SELECT (CONTO="") + INPUT GRUPPO F_SP_GRUPPO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_SP_GRUPPO GRUPPO + CHECKTYPE REQUIRED +END + +NUMBER F_SP_CONTO 3 +BEGIN + PROMPT 1 3 "Conto " + USE LF_PCON KEY 1 SELECT (SOTTOCONTO="") + INPUT GRUPPO F_SP_GRUPPO + INPUT CONTO F_SP_CONTO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_SP_CONTO CONTO + OUTPUT F_SP_GRUPPO GRUPPO + CHECKTYPE NORMAL +END + +NUMBER F_SP_SOTTOCONTO 6 +BEGIN + PROMPT 1 4 "Sottoconto " + USE LF_PCON + INPUT GRUPPO F_SP_GRUPPO + INPUT CONTO F_SP_CONTO + INPUT SOTTOCONTO F_SP_SOTTOCONTO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_SP_SOTTOCONTO SOTTOCONTO + OUTPUT F_SP_GRUPPO GRUPPO + OUTPUT F_SP_CONTO CONTO + OUTPUT F_SP_DESCRIZIONE DESCR + CHECKTYPE NORMAL +END + +STRING F_SP_DESCRIZIONE 50 +BEGIN + PROMPT 1 5 "Descrizione " + USE LF_PCON KEY 2 + INPUT DESCR F_SP_DESCRIZIONE + DISPLAY "Descrizione@50" DESCR + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + OUTPUT F_SP_SOTTOCONTO SOTTOCONTO + OUTPUT F_SP_CONTO CONTO + OUTPUT F_SP_GRUPPO GRUPPO + OUTPUT F_SP_DESCRIZIONE DESCR + CHECKTYPE NORMAL +END + +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -13 -1 "" +END + +BUTTON DLG_DELREC 10 2 +BEGIN + PROMPT -23 -1 "" +END + +BUTTON DLG_CANCEL 10 2 +BEGIN + PROMPT -33 -1 "" +END + +ENDPAGE + +ENDMASK + +//-------------------MOVIMENTI CONTABILI---------------------------// +//-----------Pagina di riga dello sheet costi----------------------// + +PAGE "Riga Ritenuta Fiscale" -1 -1 66 10 + +NUMBER F_FI_GRUPPO 3 +BEGIN + PROMPT 1 2 "Gruppo " + USE LF_PCON KEY 1 SELECT (CONTO="") + INPUT GRUPPO F_FI_GRUPPO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_FI_GRUPPO GRUPPO + CHECKTYPE REQUIRED +END + +NUMBER F_FI_CONTO 3 +BEGIN + PROMPT 1 3 "Conto " + USE LF_PCON KEY 1 SELECT (SOTTOCONTO="") + INPUT GRUPPO F_FI_GRUPPO + INPUT CONTO F_FI_CONTO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_FI_CONTO CONTO + OUTPUT F_FI_GRUPPO GRUPPO + CHECKTYPE NORMAL +END + +NUMBER F_FI_SOTTOCONTO 6 +BEGIN + PROMPT 1 4 "Sottoconto " + USE LF_PCON + INPUT GRUPPO F_FI_GRUPPO + INPUT CONTO F_FI_CONTO + INPUT SOTTOCONTO F_FI_SOTTOCONTO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_FI_SOTTOCONTO SOTTOCONTO + OUTPUT F_FI_GRUPPO GRUPPO + OUTPUT F_FI_CONTO CONTO + OUTPUT F_FI_DESCRIZIONE DESCR + CHECKTYPE NORMAL +END + +STRING F_FI_DESCRIZIONE 50 +BEGIN + PROMPT 1 5 "Descrizione " + USE LF_PCON KEY 2 + INPUT DESCR F_FI_DESCRIZIONE + DISPLAY "Descrizione@50" DESCR + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + OUTPUT F_FI_SOTTOCONTO SOTTOCONTO + OUTPUT F_FI_CONTO CONTO + OUTPUT F_FI_GRUPPO GRUPPO + OUTPUT F_FI_DESCRIZIONE DESCR + CHECKTYPE NORMAL +END + +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -13 -1 "" +END + +BUTTON DLG_DELREC 10 2 +BEGIN + PROMPT -23 -1 "" +END + +BUTTON DLG_CANCEL 10 2 +BEGIN + PROMPT -33 -1 "" +END + +ENDPAGE + +ENDMASK + +//-----------Pagina di riga dello sheet pagamenti----------------------// + +PAGE "Riga Ritenuta Sociale" -1 -1 66 10 + +NUMBER F_SO_GRUPPO 3 +BEGIN + PROMPT 1 2 "Gruppo " + USE LF_PCON KEY 1 SELECT (CONTO="") + INPUT GRUPPO F_SO_GRUPPO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_SO_GRUPPO GRUPPO + CHECKTYPE REQUIRED +END + +NUMBER F_SO_CONTO 3 +BEGIN + PROMPT 1 3 "Conto " + USE LF_PCON KEY 1 SELECT (SOTTOCONTO="") + INPUT GRUPPO F_SO_GRUPPO + INPUT CONTO F_SO_CONTO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_SO_CONTO CONTO + OUTPUT F_SO_GRUPPO GRUPPO + CHECKTYPE NORMAL +END + +NUMBER F_SO_SOTTOCONTO 6 +BEGIN + PROMPT 1 4 "Sottoconto " + USE LF_PCON + INPUT GRUPPO F_SO_GRUPPO + INPUT CONTO F_SO_CONTO + INPUT SOTTOCONTO F_SO_SOTTOCONTO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_SO_SOTTOCONTO SOTTOCONTO + OUTPUT F_SO_GRUPPO GRUPPO + OUTPUT F_SO_CONTO CONTO + OUTPUT F_SO_DESCRIZIONE DESCR + CHECKTYPE NORMAL +END + +STRING F_SO_DESCRIZIONE 50 +BEGIN + PROMPT 1 5 "Descrizione " + USE LF_PCON KEY 2 + INPUT DESCR F_SO_DESCRIZIONE + DISPLAY "Descrizione@50" DESCR + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + OUTPUT F_SO_SOTTOCONTO SOTTOCONTO + OUTPUT F_SO_CONTO CONTO + OUTPUT F_SO_GRUPPO GRUPPO + OUTPUT F_SO_DESCRIZIONE DESCR + CHECKTYPE NORMAL +END + +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -13 -1 "" +END + +BUTTON DLG_DELREC 10 2 +BEGIN + PROMPT -23 -1 "" +END + +BUTTON DLG_CANCEL 10 2 +BEGIN + PROMPT -33 -1 "" +END + +ENDPAGE + +ENDMASK diff --git a/ca/ca3700.cpp b/ca/ca3700.cpp index 6910e8ab9..e58d38a90 100755 --- a/ca/ca3700.cpp +++ b/ca/ca3700.cpp @@ -27,7 +27,6 @@ protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); const TString& get_report_class() const; bool test_compatible_report(); - bool esistono_riclassificazioni() const; public: @@ -222,13 +221,11 @@ TPrint_rendiconto_ca_mask::TPrint_rendiconto_ca_mask() } } - // creazione dei campi della seconda pagina della maschera (cdc/cms/fasi) + // creazione dei campi della pagina della maschera con lo sheet di cdc/cms/fasi create_sheet(F_RIGHE); // setta gli handlers a tutti i campi generati della maschera;senza questa chiamata la on_field_event // non puo' funzionare sui campi generati!!! set_handlers(); - - //la terza pagina ha uno sheet standard e non necessita di metodi per la creazione } @@ -1003,21 +1000,19 @@ void TPrint_rendiconto_ca_recordset::set_filter(const TPrint_rendiconto_ca_mask& } } - _dadata = msk.get_date(F_DATAINI); - _adata = msk.get_date(F_DATAFIN); + _dadata = msk.get_date(F_DATAINI); + _adata = msk.get_date(F_DATAFIN); if (_riclassificato) { //esiste un prefisso a più livelli? - if (msk.get(F_PRE1).not_empty()) + for (short id = F_PRE1; id <= F_PRE3 && msk.id2pos(id) > 0; id++) { - _prefix << msk.get(F_PRE1); - if (msk.get(F_PRE2).not_empty()) - { - _prefix << msk.get(F_PRE1); - if (msk.get(F_PRE3).not_empty()) - _prefix << msk.get(F_PRE3); - } + const TString& pr = msk.get(id); + if (pr.not_empty()) + _prefix << pr; + else + break; } } //metodi per riempire il file da cui generare il report diff --git a/ca/ca3700.h b/ca/ca3700.h index 845a5183e..dab57e521 100755 --- a/ca/ca3700.h +++ b/ca/ca3700.h @@ -44,7 +44,7 @@ #define F_PANDES1_FIN 365 #define F_PANDES4_FIN 368 -//sheet di pagina 2 +//sheet con cms/fsc/cdc #define F_RIGHE 260 #endif // __CA3700_H