diff --git a/cg/cg0200a.uml b/cg/cg0200a.uml index ba1f2e209..06265ed24 100755 --- a/cg/cg0200a.uml +++ b/cg/cg0200a.uml @@ -1023,9 +1023,10 @@ BEGIN CHECKTYPE NORMAL END -STRING F_CODAG 3 +STRING F_CODAG 5 BEGIN PROMPT 46 15 "Codice agente " + FLAGS "UZ" FIELD LF_CFVEN->CODAG GROUP 7 HELP "Codice dell'agente di cui si serve il cliente" diff --git a/cg/cg2100.h b/cg/cg2100.h index 68215351a..72965d02a 100755 --- a/cg/cg2100.h +++ b/cg/cg2100.h @@ -131,13 +131,37 @@ #define S_ANNO 101 #define S_NUM 102 -#define S_SCADENZE 103 - -#define S_RATA 101 -#define S_DATA 102 -#define S_IMPORTOVAL 103 -#define S_IMPORTO 104 -#define S_DESCR 105 -#define S_TIPO 106 +#define S_DATADOC 103 +#define S_NUMPROT 104 +#define S_NUMDOC 105 +#define S_DESCR 106 +#define S_RATA 107 +#define S_DATASCAD 108 +#define S_IMPORTO 109 +#define S_IMPORTOVAL 110 +#define S_SEZIONE 111 +#define S_IMPORTOPAG 112 +#define S_RITENUTE 113 +#define S_SEZRITENUTE 114 +#define S_SALDOACC 115 +#define S_RESIDUO 116 +#define S_DATAPAG 117 +#define S_CODPAG 118 +#define S_TIPOPAG 119 +#define S_TIPO 120 +#define S_GRUPPO 121 +#define S_CONTO 122 +#define S_SOTTOCONTO 123 +#define S_DESCRCONTO 124 +#define S_DESCAGG 125 +#define S_VSABI 126 +#define S_VSCAB 127 +#define S_DESCVSABI 128 +#define S_AGENTE 129 +#define S_DESCAGENTE 130 +#define S_NSABI 131 +#define S_NSCAB 132 +#define S_DESCNSABI 133 +#define S_DESPAG 134 #endif diff --git a/cg/cg2100s.uml b/cg/cg2100s.uml new file mode 100755 index 000000000..f878f1074 --- /dev/null +++ b/cg/cg2100s.uml @@ -0,0 +1,316 @@ +#include "cg2100.h" + +TOOLBAR "" 0 20 0 2 + +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_CANCEL 10 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + + +PAGE "Pagamento" -1 -1 77 20 + +GROUPBOX DLG_NULL 78 6 +BEGIN + PROMPT 1 0 "@BPartita" +END + +NUMBER S_ANNO 4 +BEGIN + PROMPT 2 1 "Anno partita " + FLAGS "RD" +END + +STRING S_NUM 7 +BEGIN + PROMPT 38 1 "Numero partita " + FLAGS "D" +END + +STRING S_DESCR 50 +BEGIN + PROMPT 2 2 "Descrizione " + FLAGS "D" +END + +NUMBER S_RATA 4 +BEGIN + PROMPT 2 3 "Rata " + FLAGS "D" +END + +DATE S_DATASCAD +BEGIN + PROMPT 20 3 "Data " + FLAGS "D" +END + +NUMBER S_RESIDUO 15 +BEGIN + PROMPT 44 3 "Residuo " + PICTURE "." + FLAGS "D" +END + +NUMBER S_IMPORTOVAL 15 3 +BEGIN + PROMPT 2 4 "Importo in valuta " + PICTURE ".3" + FLAGS "D" +END + +NUMBER S_IMPORTO 15 +BEGIN + PROMPT 44 4 "Importo in lire " + PICTURE "." + FLAGS "D" +END + + +GROUPBOX DLG_NULL 78 13 +BEGIN + PROMPT 1 6 "@BPagamento" +END + +NUMBER S_IMPORTOPAG 15 +BEGIN + PROMPT 2 7 "Importo pagamento " + PICTURE "." + FIELD IMPORTOPAG +END + +NUMBER S_IMPORTOPAG 15 +BEGIN + PROMPT 38 7 "Ritenute professionali " + PICTURE "." + FIELD RITENUTE +END + +BOOLEAN S_SALDOACC +BEGIN + PROMPT 2 8 "Saldo " + FIELD SALDOACC +END + +DATE S_DATAPAG +BEGIN + PROMPT 38 8 "Data pagamento " + FIELD DATAPAG +END + +STRING S_CODPAG 4 +BEGIN + PROMPT 2 9 "Pagamento " + FLAGS "UZ" + USE CPG + INPUT CODTAB S_CODPAG + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + DISPLAY "Tipo" I0 + OUTPUT S_CODPAG CODTAB + OUTPUT S_DESPAG S0 + OUTPUT S_TIPOPAG I0 + FIELD CODPAG +END + +STRING S_DESPAG 50 +BEGIN + PROMPT 24 9 "" + USE CPG KEY 2 + INPUT S0 S_DESPAG + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + DISPLAY "Tipo" I0 + COPY OUTPUT S_CODPAG +END + +LIST S_TIPOPAG 2 40 +BEGIN + PROMPT 2 10 "Tipo pagamento " + ITEM "1|Rimessa Diretta" + ITEM "2|Tratta" + ITEM "3|Ricevuta Bancaria" + ITEM "4|Cessione" + ITEM "5|Paghero'" + ITEM "6|Lettera di credito" + ITEM "7|Tratta accettata" + ITEM "8|Rapporti interbancari diretti" + ITEM "9|Bonifico" + ITEM "10|Altro" + FIELD TIPOPAG +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 11 "@bConto di contropartita" +END + +LIST S_TIPO 1 12 +BEGIN + PROMPT 2 12 "Tipo " + ITEM " |Conto" + ITEM "C|Cliente" + ITEM "F|Fornitore" + FIELD TIPOCF + FLAGS "H" +END + +NUMBER S_GRUPPO 3 +BEGIN + PROMPT 28 11 "Gruppo " + FIELD GRUPPO + CHECKTYPE REQUIRED +END + +NUMBER S_CONTO 3 +BEGIN + PROMPT 44 11 "Conto " + FIELD CONTO + CHECKTYPE REQUIRED +END + +NUMBER S_SOTTOCONTO 6 +BEGIN + PROMPT 58 11 "Sottoconto " + FIELD SOTTOCONTO + USE LF_PCON + INPUT GRUPPO S_GRUPPO + INPUT CONTO S_CONTO + INPUT SOTTOCONTO S_SOTTOCONTO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT S_GRUPPO GRUPPO + OUTPUT S_CONTO CONTO + OUTPUT S_SOTTOCONTO SOTTOCONTO + OUTPUT S_DESCRCONTO DESCR + CHECKTYPE REQUIRED +END + +STRING S_DESCRCONTO 50 +BEGIN + PROMPT 2 12 "Descrizione conto " + USE LF_PCON KEY 2 + INPUT DESCR S_DESCRCONTO + DISPLAY "Descrizione@50" DESCR + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + COPY OUTPUT S_SOTTOCONTO + CHECKTYPE REQUIRED +END + +STRING S_DESCAGG 50 +BEGIN + PROMPT 2 14 "Descrizione aggiuntiva " + FIELD DESCAGG +END + +NUMBER S_VSABI 5 +BEGIN + PROMPT 2 15 "Vostra Banca - ABI " + FLAGS "Z" + USE %BAN + INPUT CODTAB[1,5] S_VSABI + INPUT CODTAB[6,10] S_VSCAB + DISPLAY "ABI@5" CODTAB[1,5] + DISPLAY "CAB@5" CODTAB[6,10] + DISPLAY "Denominazione@50" S0 + OUTPUT S_VSABI CODTAB[1,5] + OUTPUT S_VSCAB CODTAB[6,10] + OUTPUT S_DESCVSABI S0 + CHECKTYPE REQUIRED + FIELD VSABI +END + +NUMBER S_VSCAB 5 +BEGIN + PROMPT 30 15 "CAB " + FLAGS "Z" + COPY ALL S_VSABI + CHECKTYPE REQUIRED + FIELD VSCAB +END + +STRING S_DESCVSABI 50 32 +BEGIN + PROMPT 42 15 "" + USE %BAN KEY 2 + INPUT S0 S_DESCVSABI + DISPLAY "Denominazione@50" S0 + DISPLAY "ABI@5" CODTAB[1,5] + DISPLAY "CAB@5" CODTAB[6,10] + COPY OUTPUT S_VSABI + CHECKTYPE REQUIRED +END + +STRING S_AGENTE 5 +BEGIN + PROMPT 2 16 "Agente " + FLAGS "UZ" + USE AGE + INPUT CODTAB S_AGENTE + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione @50" S0 + OUTPUT S_AGENTE CODTAB + OUTPUT S_DESCAGENTE S0 + CHECKTYPE NORMAL + FIELD AGENTE +END + +STRING S_DESCAGENTE 50 +BEGIN + PROMPT 24 16 "" + USE AGE KEY 2 + INPUT S0 S_DESCAGENTE + DISPLAY "Descrizione @50" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT S_AGENTE + CHECKTYPE NORMAL +END + + +NUMBER S_NSABI 5 +BEGIN + PROMPT 2 17 "Nostra Banca - ABI " + FLAGS "Z" + COPY USE S_VSABI + INPUT CODTAB[1,5] S_NSABI + INPUT CODTAB[6,10] S_NSCAB + COPY DISPLAY S_VSABI + OUTPUT S_NSABI CODTAB[1,5] + OUTPUT S_NSCAB CODTAB[6,10] + FIELD NSABI + CHECKTYPE REQUIRED +END + +NUMBER S_VSCAB 5 +BEGIN + PROMPT 30 17 "CAB " + FLAGS "Z" + COPY ALL S_NSABI + FIELD NSCAB + CHECKTYPE REQUIRED +END + +STRING S_DESCNSABI 50 32 +BEGIN + PROMPT 42 15 "" + COPY USE S_DESCVSABI + INPUT S0 S_DESCNSABI + COPY DISPLAY S_DESCVSABI + COPY OUTPUT S_NSABI + CHECKTYPE REQUIRED +END + +ENDPAGE + +ENDMASK diff --git a/cg/cg2102.cpp b/cg/cg2102.cpp index a2ce15441..7fa589d37 100755 --- a/cg/cg2102.cpp +++ b/cg/cg2102.cpp @@ -93,9 +93,8 @@ bool TPrimanota_application::showpartite_handler(TMask_field& f, KEY k) if (k == K_SPACE) { TSheet_field& s = app().cgs(); - TToken_string& r = s.row(s.selected()); - const TBill c(r, 2, 0x1); - app().edit_partite(c); + const int riga = s.selected(); + app().edit_partite(riga); } return TRUE; diff --git a/cg/cg2102.h b/cg/cg2102.h index 555b26519..11133ca1b 100755 --- a/cg/cg2102.h +++ b/cg/cg2102.h @@ -208,8 +208,11 @@ protected: void set_scadenze(TMask& m); bool read_scadenze(const TMask& m); void write_scadenze(const TMask& m); - bool edit_partite(const TBill& b); + bool edit_partite(int riga); + bool edit_scadenze(int riga, const TBill& b, int anno, const char* num); + bool edit_pagamento(const TRectype& parbas, const TRectype& scaden, TRectype& part); + static TPrimanota_application& app() { return (TPrimanota_application&)main_app(); } public: diff --git a/cg/cg2104.cpp b/cg/cg2104.cpp index 254f987d0..7c52ef4b8 100755 --- a/cg/cg2104.cpp +++ b/cg/cg2104.cpp @@ -10,6 +10,7 @@ #include "cg21sld.h" #include "pagament.h" +#include #include #include @@ -492,14 +493,17 @@ void TPrimanota_application::write_scadenze(const TMask& m) // Sheet partite /////////////////////////////////////////////////////////// -bool TPrimanota_application::edit_partite(const TBill& b) +bool TPrimanota_application::edit_partite(int riga) { begin_wait(); - + + TToken_string& cgr = cgs().row(riga); + const TBill b(cgr, 2, 0x3); // Legge il conto della riga selezionata + TString80 caption("Partite aperte del conto "); caption << b.gruppo() << ' ' << b.conto() << ' ' << b.sottoconto(); - TArray_sheet a(-1, -1, 0, 0, caption, "Anno|Numero@7|Descrizione@50|Importo@15R|Sezione"); + TArray_sheet a(-1, -1, 0, 0, caption, "Anno|Numero@7|Descrizione@50|Importo@15R|Sezione", 0x8); TLocalisamfile partita(LF_PARTITE); partita.setkey(2); // Chiave per conto @@ -512,9 +516,9 @@ bool TPrimanota_application::edit_partite(const TBill& b) } else b.put(partita.curr()); // Scrive completamente i conti normali - TRectype recpar(partita.curr()); // Record campione + const TRectype recpar(partita.curr());// Record campione - int ult, anno; // Anno ultima partita + int ult, anno; // Anno ultima partita TString16 last, num; // Ultimo numero partita e numero corrente TString desc; // Descrizione prima partita del gruppo TImporto saldo; // Saldo ultima parita @@ -554,46 +558,56 @@ bool TPrimanota_application::edit_partite(const TBill& b) } end_wait(); + + KEY k = a.items() > 0 ? K_ENTER : K_ESC; // Esce se non ci sono righe + while (k == K_ENTER) + { + k = a.run(); + if (k == K_ENTER) + { + const int anno = a.row().get_int(0); + const TString16 num = a.row().get(1); + edit_scadenze(riga, b, anno, num); // Edita pagamenti + } + } - const KEY k = a.items() > 0 ? a.run() : K_ESC; - if (k != K_ENTER) - return FALSE; - - anno = a.row().get_int(0); - num = a.row().get(1); - - TMask m("cg2100s"); - m.set(S_ANNO, anno); - m.set(S_NUM, num); - - TSheet_field& s = (TSheet_field&)m.field(S_SCADENZE); - TString_array& sr = s.rows_array(); + return TRUE; +} + +// Edit scadenze relative all'anno/numero partita specificati +bool TPrimanota_application::edit_scadenze(int currig, const TBill& b, int anno, const char* num) +{ + TString caption; caption.format("Pagamenti della partita %s dell'anno %d", num, anno); + TArray_sheet a(-1, -1, 0, 0, caption, "Rata|Data@10|Importo@15|Descrizione@50|Tipo", 0x8); TLocalisamfile scadenza(LF_SCADENZE); scadenza.zero(); scadenza.put(SCAD_ANNO, anno); scadenza.put(SCAD_NUMPART, num); const TRectype recsca(scadenza.curr()); - for (err = scadenza.read(_isgteq); + TToken_string r(80); + for (int err = scadenza.read(_isgteq); err == NOERR && scadenza.curr() == recsca; err = scadenza.next()) { r.cut(0); r.add(scadenza.get(SCAD_NRATA)); r.add(scadenza.get(SCAD_DATASCAD)); - r.add(scadenza.get(SCAD_IMPORTOVAL)); r.add(scadenza.get(SCAD_IMPORTO)); r.add(""); - r.add("S"); - sr.add(r); + r.add(""); + a.add(r); } + TLocalisamfile partita(LF_PARTITE); partita.setkey(1); partita.zero(); partita.put(PART_ANNO, anno); partita.put(PART_NUMPART, num); - recpar = partita.curr(); + const TRectype recpar(partita.curr()); const TString16 curreg(curr_mask().get(F_NUMREG)); // Numero registrazione corrente - desc.cut(0); + TString desc; // Descrizione di default + + TRectype parbas(recpar); for (err = partita.read(_isgteq); err == NOERR && partita.curr() == recpar; err = partita.next()) { @@ -601,20 +615,22 @@ bool TPrimanota_application::edit_partite(const TBill& b) if (desc.empty()) { + parbas = partita.curr(); // Memorizza parita base + desc = partita.get(PART_DESCR); // Aggiorna descrizione scadenze - for (int i = 0; i < sr.items(); i++) + for (int i = 0; i < a.items(); i++) { - TToken_string& t = sr.row(i); - if (t.get(S_DESCR-101)[0] <= ' ') - t.add(desc, S_DESCR-101); + TToken_string& t = a.row(i); + if (t.get(3)[0] <= ' ') + t.add(desc, 3); } } if (rata < 1 || partita.get(PART_REG).not_empty()) continue; - for (int i = sr.items()-1; i >= 0; i--) // Cerca scadenza corrispondente - if (sr.row(i).get_int(0) == rata) break; + for (long i = a.items()-1; i >= 0; i--) // Cerca scadenza corrispondente + if (a.row(i).get_int(0) == rata) break; if (i < 0) error_box("Non esiste una scadenza per la rata %d", rata); @@ -622,18 +638,157 @@ bool TPrimanota_application::edit_partite(const TBill& b) r.cut(0); r.add(rata); r.add(partita.get(PART_DATADOC)); - r.add(partita.get(PART_IMPORTOVAL)); r.add(partita.get(PART_IMPORTO)); r.add(desc); - r.add("P"); - i = sr.insert(r, i >= 0 ? i+1 : -1); + r.add(partita.get(PART_NRIGA)); + i = a.insert(r, i >= 0 ? i+1 : -1); - if (partita.get(PART_NREG) != curreg) - s.disable_cell(i, -1); + if (partita.get(PART_NREG) != curreg || partita.get_int(PART_NRIGA) != currig) + a.disable(i); } - s.force_update(); - m.run(); + KEY k = a.items() > 0 ? K_ENTER : K_ESC; // Esce se non ci sono righe + while (k == K_ENTER) + { + k = a.run(); + if (k == K_ENTER) + { + const int rata = a.row().get_int(0); + scadenza.zero(); + scadenza.put(SCAD_ANNO, anno); + scadenza.put(SCAD_NUMPART, num); + scadenza.put(SCAD_NRATA, rata); + err = scadenza.read(); + CHECKD(err == NOERR, "Non ritrovo piu' la rata ", rata); + + int nrig = a.row().get_int(4); + if (nrig == 0) // Ho cliccato su una scadenza + { + for (long i = a.selected()+1; i < a.items(); i++) // Cerca pagamento + { + const int r = a.row(i).get_int(4); + if (r == 0 || a.enabled(i)) + { + nrig = r; + break; + } + } + } + + TRectype part(parbas); + if (nrig == 0) // Inserimento di un nuovo pagamento + part.zero(); + else + { + } + + if (edit_pagamento(parbas, scadenza.curr(), part)) + { + err = (nrig == 0) ? partita.write(part) : partita.rewrite(part); + } + } + } return TRUE; } + +bool TPrimanota_application::edit_pagamento(const TRectype& parbas, + const TRectype& scaden, + TRectype& part) +{ + TMask m("cg2100s"); + + TRelation rel(LF_PARTITE); // Working relation + + rel.lfile().curr() = part; + + const real importo(scaden.get(SCAD_IMPORTO)); + const real importopag(part.get(SCAD_IMPORTO)); + const real ritenute(part.get(PART_RITENUTE)); + const real residuo = importo - importopag; + + m.set(S_RESIDUO, residuo.string()); + m.set(S_DATADOC, parbas.get(PART_DATADOC)); + m.set(S_NUMPROT, parbas.get(PART_PROTIVA)); + m.set(S_NUMDOC, parbas.get(PART_NUMDOC)); + m.set(S_DESCR, parbas.get(PART_DESCR)); + + m.set(S_RATA, scaden.get(SCAD_NRATA)); + m.set(S_DATASCAD, scaden.get(SCAD_DATASCAD)); + m.set(S_IMPORTO, scaden.get(SCAD_IMPORTO)); + m.set(S_IMPORTOVAL, scaden.get(SCAD_IMPORTOVAL)); + m.set(S_SEZIONE, parbas.get(PART_SEZ)); + m.set(S_IMPORTOPAG, importopag.string()); + + if (part.empty()) // Insert mode + { + TString80 tmp; + + tmp = curr_mask().get(F_DATAREG); + m.set(S_DATAPAG, tmp); + + tmp = scaden.get(SCAD_CODPAG); + m.set(S_CODPAG, tmp); + + tmp = scaden.get(SCAD_TIPOPAG); + m.set(S_TIPOPAG, tmp); + + int caus = 2; // Calcola riga causale + switch (atoi(tmp)) + { + case 2: + caus = 3; break; // Tratta + case 3: + caus = 4; break; // Ricevuta bancaria + case 4: + caus = 5; break; // Cessione + case 5: + caus = 6; break; // Paghero' + case 6: + caus = 7; break; // Fattura di credito + case 7: + caus = 3; break; // Tratta accettata + case 1: // Rimessa + case 8: // Rapporti interbancari diretti + case 9: // Bonifico + default: + caus = 2; break; + } + + TBill bill; causale().bill(caus, bill); + m.set(S_TIPO, bill.tipo()); + m.set(S_GRUPPO, bill.gruppo()); + m.set(S_CONTO, bill.conto()); + m.set(S_SOTTOCONTO, bill.sottoconto()); + + tmp = curr_mask().get(F_DESCR); + m.set(S_DESCR, tmp); + + bill.get(parbas); + if (bill.tipo() > ' ') + { + TLocalisamfile clifo(LF_CLIFO); + clifo.put(CLI_TIPOCF, bill.tipo()); + clifo.put(CLI_CODCF, bill.codclifo()); + tmp = clifo.get(CLI_CODABI); + m.set(S_VSABI, tmp); + tmp = clifo.get(CLI_CODBAN); + m.set(S_VSCAB, tmp); + tmp = clifo.get(CLI_CODAG); + m.set(S_AGENTE, tmp); + } + tmp = scaden.get(SCAD_CODABIPR); + m.set(S_NSABI, tmp); + tmp = scaden.get(SCAD_CODCABPR); + m.set(S_NSCAB, tmp); + } + + const KEY key = m.run(); + if (key == K_ENTER) + { + m.autosave(&rel); + part = rel.lfile().curr(); + } + + return key == K_ENTER; +} diff --git a/cg/conto.cpp b/cg/conto.cpp index 8e4341ad0..8ba393a19 100755 --- a/cg/conto.cpp +++ b/cg/conto.cpp @@ -88,6 +88,7 @@ const char* TBill::file2type(int num) const switch (num) { case LF_PARTITE: + case LF_SCADENZE: t = "TIPOCF"; break; default: break; diff --git a/cg/conto.h b/cg/conto.h index f398e09ef..551137341 100755 --- a/cg/conto.h +++ b/cg/conto.h @@ -44,6 +44,7 @@ public: int gruppo() const { return _gruppo; } int conto() const { return _conto; } long sottoconto() const { return _sottoconto; } + long codclifo() const { return _sottoconto; } bool find(); const TString& descrizione();