diff --git a/cg/cg0200.cpp b/cg/cg0200.cpp index 6c8d859bc..cd68d6522 100755 --- a/cg/cg0200.cpp +++ b/cg/cg0200.cpp @@ -1,11 +1,10 @@ -#include -#include -#include -#include -#include -#include #include #include +#include +#include +#include +#include +#include #include #include @@ -19,11 +18,10 @@ #include "cg0200.h" #include "cg0201.h" - class TClifo_application : public TRelation_application { TMask* _msk; - TClifoVI *_rel; + TClifoVI* _rel; TLocalisamfile* _mov; TLocalisamfile* _anag; TLocalisamfile* _fis; @@ -73,7 +71,7 @@ bool TClifo_application::protected_record(TRectype &rec) { TMask* m = get_mask(MODE_MOD); - const TString16 tipocf(m->get(F_TIPOCF)); + const TString16 tipocf(m->get(F_TIPOCF)); const long codice = atol(m->get(F_CODCF)); _mov->curr().zero(); @@ -224,7 +222,6 @@ HIDDEN bool autoexit_handler(TMask_field& f, KEY key) } bool TClifo_application::tipo_handler(TMask_field& f, KEY key) - { TMask& m = f.mask(); @@ -358,20 +355,15 @@ void TClifo_application::init_pages(TMask& m) TConfig conf(CONFIG_DITTA, "cg"); _lbcn = conf.get_bool("GsLbCn"); _gesven = conf.get_bool("GesVen"); + + _rel->gestione_vendite(_gesven); m.send_key(K_SHIFT + K_CTRL + (_lbcn ? 's' : 'h'), -5); + // Se non e' abilitata la gestione delle vendite disabilita le // maschere dalla 4 in poi - if (_gesven) - { - for (int j=3; j<8;j++) - m.enable_page(j); - } - else - { - for (int j=3; j<8;j++) - m.disable_page(j); - } + for (int j = 3; j < 8;j++) + m.enable_page(j, _gesven); } void TClifo_application::init_query_mode(TMask& m) @@ -387,60 +379,63 @@ void TClifo_application::init_query_mode(TMask& m) int TClifo_application::read(TMask& m) { - TToken_string riga(240); - - m.autoload(_rel); - indsp_sheet().reset(); - for (int i=0; i< _rel->indirizzi_items();i++) + TRelation_application::read(m); + + if (_gesven) { - TRectype& rec=_rel->indirizzo(i); - riga.cut(0); - riga.add(rec.get(IND_RAGSOC)); - riga.add(rec.get(IND_INDIR)); - riga.add(rec.get(IND_CIV)); - riga.add(rec.get(IND_LOCALITA)); - riga.add(rec.get(IND_CAP)); - riga.add(rec.get(IND_STATO)); - riga.add(rec.get(IND_COM)); - riga.add(rec.get(IND_PTEL)); - riga.add(rec.get(IND_TEL)); - riga.add(rec.get(IND_PFAX)); - riga.add(rec.get(IND_FAX)); - riga.add(rec.get(IND_IVARID)); - riga.add(rec.get(IND_CODIND)); - indsp_sheet().row(i)=riga; - - // Load the sheets of CODINDDOC, CODINDSP, CODINDEFF. - riga.cut(0); - riga.add(rec.get(IND_CODIND)); - riga.add(rec.get(IND_RAGSOC)); - riga.add(rec.get(IND_INDIR)); - riga.add(rec.get(IND_CIV)); - riga.add(rec.get(IND_LOCALITA)); - field_sheet(F_CODINDDOC)->add(riga); - field_sheet(F_CODINDSP)->add(riga); - field_sheet(F_CODINDEFF)->add(riga); - } + TToken_string riga(240); + indsp_sheet().reset(); + for (int i=0; i< _rel->indirizzi_items();i++) + { + TRectype& rec=_rel->indirizzo(i); + riga.cut(0); + riga.add(rec.get(IND_RAGSOC)); + riga.add(rec.get(IND_INDIR)); + riga.add(rec.get(IND_CIV)); + riga.add(rec.get(IND_LOCALITA)); + riga.add(rec.get(IND_CAP)); + riga.add(rec.get(IND_STATO)); + riga.add(rec.get(IND_COM)); + riga.add(rec.get(IND_PTEL)); + riga.add(rec.get(IND_TEL)); + riga.add(rec.get(IND_PFAX)); + riga.add(rec.get(IND_FAX)); + riga.add(rec.get(IND_IVARID)); + riga.add(rec.get(IND_CODIND)); + indsp_sheet().row(i)=riga; + + // Load the sheets of CODINDDOC, CODINDSP, CODINDEFF. + riga.cut(0); + riga.add(rec.get(IND_CODIND)); + riga.add(rec.get(IND_RAGSOC)); + riga.add(rec.get(IND_INDIR)); + riga.add(rec.get(IND_CIV)); + riga.add(rec.get(IND_LOCALITA)); + field_sheet(F_CODINDDOC)->add(riga); + field_sheet(F_CODINDSP)->add(riga); + field_sheet(F_CODINDEFF)->add(riga); + } + } return _rel->status(); } int TClifo_application::rewrite(const TMask& m) { common_f(m); - return _rel->rewrite(TRUE); + return TRelation_application::rewrite(m); } int TClifo_application::write(const TMask& m) { common_f(m); - return _rel->write(TRUE); + return TRelation_application::write(m); } TArray_sheet* TClifo_application::field_sheet(const int n) const { TEdit_field& f=(TEdit_field&) _msk->field(n); - TArray_sheet* S=(TArray_sheet*) f.sheet()->sheet(); - return S; + TArray_sheet* ss=(TArray_sheet*) f.sheet()->sheet(); + return ss; } TSheet_field& TClifo_application::indsp_sheet() const @@ -477,35 +472,38 @@ void TClifo_application::indsp_pack() void TClifo_application::common_f(const TMask& m) { - char tipocf = m.get(F_TIPOCF)[0]; - long codcf = m.get_long(F_CODCF); - _rel->lfile().zero(); - m.autosave(_rel); - _rel->destroy_rows(); - indsp_pack(); - TArray& rows=indsp_sheet().rows_array(); - int n_items = rows.items(); - for (int i=0; iindirizzo(i); - row.restart(); - rec.zero(); - rec.put(IND_TIPOCF,tipocf); - rec.put(IND_CODCF,codcf); - rec.put(IND_RAGSOC,row.get()); - rec.put(IND_INDIR,row.get()); - rec.put(IND_CIV,row.get()); - rec.put(IND_LOCALITA,row.get()); - rec.put(IND_CAP,row.get()); - rec.put(IND_STATO,row.get_int()); - rec.put(IND_COM,row.get()); - rec.put(IND_PTEL,row.get()); - rec.put(IND_TEL,row.get()); - rec.put(IND_PFAX,row.get()); - rec.put(IND_FAX,row.get()); - rec.put(IND_IVARID,row.get()); - rec.put(IND_CODIND,i+1); + const char tipocf = m.get(F_TIPOCF)[0]; + const long codcf = m.get_long(F_CODCF); + + _rel->destroy_rows(); + indsp_pack(); + TArray& rows=indsp_sheet().rows_array(); + int n_items = rows.items(); + + for (int i = 0; i < n_items; i++) + { + TToken_string& row=(TToken_string&)rows[i]; + TRectype& rec=_rel->indirizzo(i); + row.restart(); + rec.zero(); + rec.put(IND_TIPOCF,tipocf); + rec.put(IND_CODCF,codcf); + rec.put(IND_RAGSOC,row.get()); + rec.put(IND_INDIR,row.get()); + rec.put(IND_CIV,row.get()); + rec.put(IND_LOCALITA,row.get()); + rec.put(IND_CAP,row.get()); + rec.put(IND_STATO,row.get_int()); + rec.put(IND_COM,row.get()); + rec.put(IND_PTEL,row.get()); + rec.put(IND_TEL,row.get()); + rec.put(IND_PFAX,row.get()); + rec.put(IND_FAX,row.get()); + rec.put(IND_IVARID,row.get()); + rec.put(IND_CODIND,i+1); + } } } @@ -524,7 +522,6 @@ bool TClifo_application::indsp_handler(TMask_field& f, KEY key) { TToken_string& riga=(TToken_string&)righe[i]; TToken_string rigav; - riga.restart(); rigav.add(riga.get(12)); rigav.add(riga.get(0)); rigav.add(riga.get()); @@ -560,17 +557,12 @@ bool TClifo_application::indsp_notify(int r, KEY key) case K_INS: // request to add the row #r // To avoid rewriting of existing record. - if (indsp.items() >= 999) + // To avoid inserts in the middle of the sheet + if (r != -1 && indsp.items() > r) { - error_box("Raggiunto il numero massimo degli indirizzi per questo C/F"); - return FALSE; // Refuse Permission - } else - // To avoid inserts in the middle of the sheet - if (r != -1 && indsp.items() > r) - { - error_box("Si possono aggiungere indirizzi solo alla fine"); - return FALSE; //Refuse permission - } + error_box("Si possono aggiungere indirizzi solo alla fine"); + return FALSE; //Refuse permission + } break; default: break; diff --git a/cg/cg0200b.uml b/cg/cg0200b.uml index 1560af4c5..c1b66826b 100755 --- a/cg/cg0200b.uml +++ b/cg/cg0200b.uml @@ -125,13 +125,13 @@ BOOLEAN F_IVARIDI BEGIN PROMPT 2 13 "Riduzione IVA" HELP "Indicare se Š soggetto a riduzione IVA" - GROUP 1 + GROUP 1 END NUMBER F_CODINDI 3 BEGIN PROMPT 1 1 "Codice " - HELP "Codice riferito alla tabella indirizzi" + FLAGS "D" END BUTTON DLG_OK 9 2 diff --git a/cg/cg0201.cpp b/cg/cg0201.cpp index 1180670e4..8a13c3882 100755 --- a/cg/cg0201.cpp +++ b/cg/cg0201.cpp @@ -1,20 +1,14 @@ -#include - #include "cg0201.h" #include #include - // Definizione dei metodi relativi alla classe TClifoVI -TClifoVI::TClifoVI():TRelation(LF_CLIFO), _oldindirizzi(0) +TClifoVI::TClifoVI():TRelation(LF_CLIFO), _oldindirizzi(0), _gesven(FALSE) { add(LF_CFVEN,"TIPOCF=TIPOCF|CODCF=CODCF"); add(LF_INDSP,"TIPOCF=TIPOCF|CODCF=CODCF"); - - TConfig conf(CONFIG_DITTA, "cg"); - _gesven = conf.get_bool("GesVen"); } void TClifoVI::destroy_rows() @@ -36,18 +30,18 @@ TRectype& TClifoVI::indirizzo(int i) int TClifoVI::read_indirizzi() { + destroy_rows(); if (_gesven) { const TLocalisamfile& rind = lfile(LF_INDSP); position_rels(); - destroy_rows(); for (bool ok=is_first_match(LF_INDSP); ok; ok=next_match(LF_INDSP)) { const int nriga=rind.get_int(IND_CODIND) -1; indirizzo(nriga)=rind.curr(); } + _oldindirizzi=indirizzi_items(); } - _oldindirizzi=indirizzi_items(); return NOERR; } diff --git a/cg/cg0201.h b/cg/cg0201.h index 9dd7e7d78..619bc343f 100755 --- a/cg/cg0201.h +++ b/cg/cg0201.h @@ -31,6 +31,8 @@ public: TRectype& indirizzo(int i); int indirizzi_items() const {return _indirizzi.items();} void destroy_rows(); + + void gestione_vendite(bool gv) { _gesven = gv; } TClifoVI(); virtual ~TClifoVI() {} diff --git a/cg/cg0500.cpp b/cg/cg0500.cpp index f08d68d33..02366e478 100755 --- a/cg/cg0500.cpp +++ b/cg/cg0500.cpp @@ -22,6 +22,13 @@ typedef enum { no_descr, acquisto, vendita, incasso_pagamento, class TCaus_app : public TRelation_application { + TRelation* _rel; // Relazione principale + TMask* _msk; // Maschera principale + + // Bitarray delle righe lette da file all'inizio. + // Quando leggo dal file la riga n setto il bit n. + TBit_array _righe_gia_presenti; + int _filtro; // tipo di filtro su tab. reg. // 1 vendite senza corrisp // 2 vendite con corrisp @@ -49,22 +56,15 @@ protected: static bool m770_hndl (TMask_field& f, KEY k); static bool ss_notify (int r, KEY k); - TRelation * _rel; - TMask * _msk; - - // Bitarray delle righe lette da file all'inizio. - // Quando leggo dal file la riga n setto il bit n. - TBit_array _righe_gia_presenti; - void togli_dal_file(const TString&); void read_rcaus(TMask&); bool fill_sheet(TMask&); - void set_descr (int numrig=-1, const char * descr=""); - void clear(int riga); // pulisce una riga in seguito ad Azzera - void clear_descr(); // cancella solo le descrizioni fisse - void carica_righe_libere(); + void set_descr (int numrig, const char* descr); + void clear(int riga); + void clear_descr(); + void carica_righe_libere(int from = -1); void causale_inc_pag(); void causale_ritenute (); void causale_vendite (); @@ -96,10 +96,10 @@ public: void compila_array (const TString&, int, int, int); TSheet_field& ss() const { return *_sheet; } - TMask& ss_mask() const { return _sheet->sheet_mask(); } + TMask& ss_mask() const { return _sheet->sheet_mask(); } - void add_riga (int numrig, char sz, TConto& tc, const TString& d, const TString& da); - bool mostra_campi(TMask_field& f); + void add_riga (int numrig, char sz, TConto& tc, const TString& d, const TString& da); + bool mostra_campi(TMask_field& f); bool valuta() const { return _valuta; } bool saldaconto() const { return _saldaconto; } @@ -159,100 +159,105 @@ void TCaus_app::set_descr(int i, const char * dfi) r.add(dfi, 0); } -void TCaus_app::carica_righe_libere() +void TCaus_app::carica_righe_libere(int from) { - for (int i = ss().items(); i < 20; i++) - set_descr(i); + if (from < 0) from = ss().items(); + for (int i = from; i < 20; i++) + set_descr(i, ""); ss().force_update(); } // Cancella tutte le descrizioni delle righe void TCaus_app::clear_descr() -{ - TArray& a = ss().rows_array(); - for (int i=0; i < a.items(); i++) +{ + if (_tipo_des != no_descr) { - TToken_string& r = (TToken_string&)a[i]; - r.add("", 0); - } - app()._tipo_des = no_descr; + TArray& a = ss().rows_array(); + for (int i = 0; i < a.items(); i++) + { + TToken_string& r = (TToken_string&)a[i]; + r.add("", 0); + } + carica_righe_libere(); + _tipo_des = no_descr; + } } void TCaus_app::causale_vendite() { - if (_tipo_des == vendita) - return; - - _tipo_des = vendita; - - int i=0; - set_descr(i++, "C Clienti"); - set_descr(i++, "C Di ricavo"); - set_descr(i++, "C Iva vendite"); - set_descr(i++, "C Iva non detraibile"); - set_descr(i++, "C Imp. esenti"); - set_descr(i++, "C Imp. non imponibili"); - set_descr(i++, "C Imp. non soggetti"); - set_descr(i++, "C Ritenute fiscali"); - set_descr(i++, "C Ritenute soc."); + if (_tipo_des != vendita) + { + int i = 0; + set_descr(i++, "C Clienti"); + set_descr(i++, "C Di ricavo"); + set_descr(i++, "C Iva vendite"); + set_descr(i++, "C Iva non detraibile"); + set_descr(i++, "C Imp. esenti"); + set_descr(i++, "C Imp. non imponibili"); + set_descr(i++, "C Imp. non soggetti"); + set_descr(i++, "C Ritenute fiscali"); + set_descr(i++, "C Ritenute soc."); + carica_righe_libere(i); + _tipo_des = vendita; + } } void TCaus_app::causale_acquisti() { - if (_tipo_des == acquisto) - return; - - _tipo_des = acquisto; - - int i=0; - set_descr( i++, "C Fornitori"); - set_descr(i++, "C Di costo"); - set_descr(i++, "C Iva acquisti"); - set_descr(i++, "C Iva non detraibile"); - set_descr(i++, "C Imp. esenti"); - set_descr(i++, "C Imp. non imponibili"); - set_descr(i++, "C Imp. non soggetti"); - set_descr(i++, "C Ritenute fiscali"); - set_descr(i++, "C Ritenute soc."); + if (_tipo_des != acquisto) + { + int i = 0; + set_descr( i++, "C Fornitori"); + set_descr(i++, "C Di costo"); + set_descr(i++, "C Iva acquisti"); + set_descr(i++, "C Iva non detraibile"); + set_descr(i++, "C Imp. esenti"); + set_descr(i++, "C Imp. non imponibili"); + set_descr(i++, "C Imp. non soggetti"); + set_descr(i++, "C Ritenute fiscali"); + set_descr(i++, "C Ritenute soc."); + carica_righe_libere(i); + _tipo_des = acquisto; + } } void TCaus_app::causale_ritenute() { - if (_tipo_des == ritenuta_occas) - return; - - _tipo_des = ritenuta_occas; - - int i=0; - set_descr (i++, "Costo"); - set_descr (i++, "Cassa/banca"); - set_descr (i++, "Erario"); + if (_tipo_des != ritenuta_occas) + { + int i = 0; + set_descr (i++, "Costo"); + set_descr (i++, "Cassa/banca"); + set_descr (i++, "Erario"); + carica_righe_libere(i); + _tipo_des = ritenuta_occas; + } } void TCaus_app::causale_inc_pag() { const tipo_descr tipo_des = valuta() ? incasso_pagamento_gesval : incasso_pagamento; - if (_tipo_des == tipo_des) - return; - - _tipo_des = tipo_des; - - int i=0; - set_descr ( i++, "C Clienti/Fornitori"); - set_descr ( i++, "C Cassa o banca"); - set_descr ( i++, "C Tratta"); - set_descr ( i++, "C Ricevuta bancaria"); - set_descr ( i++, "C Cessione"); - set_descr ( i++, "C Paghero'"); - set_descr ( i++, "C Lettera di credito"); - set_descr ( i++, "C Abb. pass/sc."); - set_descr ( i++, "C Abb. att/sc."); - set_descr ( i++, "C Spese e rimborsi"); - set_descr ( i++, "C Ritenute fiscali"); - if (_tipo_des == incasso_pagamento_gesval) - set_descr (i++, "C Differenza cambio"); + if (_tipo_des != tipo_des) + { + int i = 0; + set_descr ( i++, "C Clienti/Fornitori"); + set_descr ( i++, "C Cassa o banca"); + set_descr ( i++, "C Tratta"); + set_descr ( i++, "C Ricevuta bancaria"); + set_descr ( i++, "C Cessione"); + set_descr ( i++, "C Paghero'"); + set_descr ( i++, "C Lettera di credito"); + set_descr ( i++, "C Abb. pass/sc."); + set_descr ( i++, "C Abb. att/sc."); + set_descr ( i++, "C Spese e rimborsi"); + set_descr ( i++, "C Ritenute fiscali"); + if (_tipo_des == incasso_pagamento_gesval) + set_descr (i++, "C Differenza cambio"); + carica_righe_libere(i); + _tipo_des = tipo_des; + } } //////////////////////////////////////////////////////////////////////////// @@ -372,11 +377,10 @@ bool TCaus_app::codcausim_hndl (TMask_field& f, KEY k) caus.put(CAU_CODCAUS, causim); if (caus.read() == NOERR) { - const int tpm = caus.get_int(CAU_TIPOMOV); - TString16 codreg = caus.get(CAU_REG); + const int tpm = caus.get_int(CAU_TIPOMOV); + const TString& codreg = caus.get(CAU_REG); if (codreg.not_empty() || tpm != 0) - return f.warning_box("La causale per l'incasso immediato specificata (%s) deve essere puramente contabile", - (const char *) causim); + return f.warning_box("La causale per l'incasso/pagamento immediato deve essere puramente contabile"); } } return TRUE; @@ -395,7 +399,7 @@ bool TCaus_app::mostra_campi(TMask_field& f) m.hide(F_FAT_RITARDO); m.hide(F_OP_INTRACOM); m.hide(F_VALINTRA); - // if (salda_conto()) + m.hide(F_COD_CAUS_IM); switch (tpm) @@ -602,8 +606,6 @@ bool TCaus_app::sottoconto_hndl(TMask_field& f, KEY k) void TCaus_app::compila_array(const TString& tpd, int tpm, int tpr, int m770) { - clear_descr(); - if (tpd.empty() || tpd == "IN" || tpd == "AN" || tpd == "PG") { switch (tpm) @@ -618,18 +620,22 @@ void TCaus_app::compila_array(const TString& tpd, int tpm, int tpr, int m770) if (m770 == 6) causale_ritenute(); default: + clear_descr(); break; } } else // C'e' il tipodoc. { - if (tpr == 1) - causale_vendite(); - else - if (tpr == 2) - causale_acquisti(); + switch (tpr) + { + case 1: + causale_vendite(); break; + case 2: + causale_acquisti(); break; + default: + clear_descr(); break; + } } - carica_righe_libere(); } diff --git a/cg/cg0500.h b/cg/cg0500.h index 840395494..5ef78bae7 100755 --- a/cg/cg0500.h +++ b/cg/cg0500.h @@ -29,9 +29,10 @@ #define F_COD_CAUS2 126 #define F_DESCR2 127 -#define SS_SEZIONE 102 -#define SS_TIPOCF 103 -#define SS_GRUPPO 104 -#define SS_CONTO 105 -#define SS_SOTTOCONTO 106 -#define SS_DESCAGG 108 \ No newline at end of file +#define SS_SEZIONE 102 +#define SS_TIPOCF 103 +#define SS_GRUPPO 104 +#define SS_CONTO 105 +#define SS_SOTTOCONTO 106 +#define SS_DESCAGG 108 +#define SS_DESCRIPTION 109 diff --git a/cg/cg0500a.uml b/cg/cg0500a.uml index 5a5781196..df642dfb0 100755 --- a/cg/cg0500a.uml +++ b/cg/cg0500a.uml @@ -34,7 +34,7 @@ BEGIN MESSAGE COPY, F_COD_CAUS2 END -STRING F_DESCR 40 +STRING F_DESCR 50 BEGIN PROMPT 17 1 "Descrizione " FIELD LF_CAUSALI->DESCR diff --git a/cg/cg0500b.uml b/cg/cg0500b.uml index 88de8e905..59478bdea 100755 --- a/cg/cg0500b.uml +++ b/cg/cg0500b.uml @@ -184,6 +184,7 @@ BEGIN OUTPUT 206 CODCF OUTPUT 207 RAGSOC GROUP 1 + ADD RUN CG0 -1 C END // Descrizione FORNITORE @@ -203,6 +204,7 @@ BEGIN OUTPUT 306 CODCF OUTPUT 307 RAGSOC GROUP 1 + ADD RUN CG0 -1 F END STRING SS_DESCAGG 5 @@ -216,16 +218,22 @@ BEGIN DISPLAY "Codice" CODTAB DISPLAY "Descrizione @50" S0 OUTPUT SS_DESCAGG CODTAB - OUTPUT 109 S0 + OUTPUT SS_DESCRIPTION S0 CHECKTYPE NORMAL - WARNING "Codice descrizione aggiuntiva assente" + WARNING "Codice descrizione aggiuntiva errato" GROUP 1 END -STRING 109 50 +STRING SS_DESCRIPTION 50 BEGIN PROMPT 1 8 "" - FLAGS "D" + USE %DPN KEY 2 + INPUT S0 SS_DESCRIPTION + DISPLAY "Descrizione @50" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT SS_DESCAGG + CHECKTYPE NORMAL + WARNING "Descrizione aggiuntiva errata" GROUP 1 END diff --git a/cg/cg2100.cpp b/cg/cg2100.cpp index 34958c1a7..5c1e9d925 100755 --- a/cg/cg2100.cpp +++ b/cg/cg2100.cpp @@ -63,6 +63,8 @@ TMask* TPrimanota_application::load_mask(int n) m->set_handler(F_TOTALE, totale_handler); m->set_handler(F_RITFIS, ritfis_handler); m->set_handler(F_RITSOC, ritsoc_handler); + m->set_handler(F_CORRLIRE, corrlire_handler); + m->set_handler(F_CORRVALUTA, corrvaluta_handler); m->set_handler(F_CODIVA, main_codiva_handler); m->set_handler(F_OCCASEDIT, occas_handler); m->set_handler(F_SOLAIVA, solaiva_handler); @@ -182,9 +184,9 @@ bool TPrimanota_application::read_caus(const char* cod, int year) if (ok) { - nob = _causale.num_doc(); - dob = _causale.data_doc(); sal = gestione_saldaconto() && _causale.saldaconto(); + dob = sal | _causale.data_doc(); + nob = sal | _causale.num_doc(); iva = _causale.iva(); } @@ -194,7 +196,6 @@ bool TPrimanota_application::read_caus(const char* cod, int year) m->efield(F_NUMDOC).check_type(nob ? CHECK_REQUIRED : CHECK_NORMAL); // Num. doc. obbligatorio m->efield(F_DATADOC).check_type(dob ? CHECK_REQUIRED : CHECK_NORMAL); // Data doc. obbligatoria - if (iva != nessuna_iva) { const CheckType ct = sal ? CHECK_REQUIRED : CHECK_NORMAL; @@ -211,6 +212,55 @@ bool TPrimanota_application::read_caus(const char* cod, int year) m->set(F_NUMRIF, val); } } + + if (!ci_sono_importi()) + { + cgs().reset(); + for (int i = 1; i < _causale.size(); i++) + { + const TRectype* rcaus = (TRectype*)_causale.objptr(i); + if (rcaus == NULL) continue; // Evita eventuali righe nulle + + const int nriga = rcaus->get_int(RCA_NRIGA); + if (nriga < 1) continue; // Considera solo righe reali (non riempimenti) + + TBill tc; _causale.bill(nriga, tc); + if (tc.gruppo() < 1) continue; // Considera solo gruppi validi + + if (tc.tipo() > ' ' && tc.sottoconto() != 0) + { + TBill clifo(0, 0, tc.sottoconto(), tc.tipo()); + clifo.descrizione(); + if (clifo.conto() != 0) + tc = clifo; + } + + const char sezione = rcaus->get_char(RCA_SEZIONE); + const TImporto zero('D', ZERO); + const TString80 desc(_causale.desc_agg(i)); + + if (nriga == 1) m->set(F_DESCR, desc); + + if (iva == nessuna_iva) + { + const int pos = set_cgs_row(-1,zero,tc,desc,' '); + if (sezione > ' ') + cgs().disable_cell(pos, sezione == 'A' ? 0 : 1); + } + else + { + if (nriga >= 2 && nriga <= 9) + continue; // Conti per IVA detraibile e non, ritenute sociali e fiscali + + const char tipo = nriga == 1 ? 'T' : ' '; + if (nriga == 1 && tc.tipo() > ' ' && tc.sottoconto() != 0) + m->set(tc.tipo() == 'C' ? F_CLIENTE : F_FORNITORE, tc.sottoconto()); + set_cgs_row(-1,zero,tc,desc,tipo); + } + } + fill_sheet(*m); + } + return ok; } @@ -229,14 +279,11 @@ bool TPrimanota_application::changing_mask(int mode) if (flag && _iva != nessuna_iva && !_iva_showed) { - if (!ivas().dirty()) - { - WINDOW w = ivas().parent(); - show_window(w, TRUE); - set_front_window(w); - process_events(); - show_window(w, FALSE); - } + WINDOW w = ivas().parent(); + show_window(w, TRUE); + set_front_window(w); + process_events(); + show_window(w, FALSE); _iva_showed = TRUE; } @@ -391,51 +438,6 @@ void TPrimanota_application::init_insert_mode(TMask& m) const long protiva = causale().reg().protocol(); m.set(F_PROTIVA, protiva+1); } - - if (m.get(F_CODCAUS).empty()) return; - - for (int i = 1; i < _causale.size(); i++) - { - const TRectype* rcaus = (TRectype*)_causale.objptr(i); - if (rcaus == NULL) continue; // Evita eventuali righe nulle - - const int nriga = rcaus->get_int(RCA_NRIGA); - if (nriga < 1) continue; // Considera solo righe reali (non riempimenti) - - TBill tc; _causale.bill(nriga, tc); - if (tc.conto() < 1) continue; // Considera solo conti validi - - if (tc.tipo() > ' ' && tc.sottoconto() != 0) - { - TBill clifo(0, 0, tc.sottoconto(), tc.tipo()); - clifo.descrizione(); - if (clifo.conto() != 0) - tc = clifo; - } - - const char sezione = rcaus->get_char(RCA_SEZIONE); - const TImporto zero('D', ZERO); - const TString80 desc(_causale.desc_agg(i)); - - if (nriga == 1) m.set(F_DESCR, desc); - - if (iva() == nessuna_iva) - { - const int pos = set_cgs_row(-1,zero,tc,desc,' '); - if (sezione > ' ') - cgs().disable_cell(pos, sezione == 'D' ? 1 : 0); - } - else - { - if (nriga >= 2 && nriga <= 9) - continue; // Conti per IVA detraibile e non, ritenute sociali e fiscali - - const char tipo = nriga == 1 ? 'T' : ' '; - if (nriga == 1 && tc.tipo() > ' ' && tc.sottoconto() != 0) - m.set(tc.tipo() == 'C' ? F_CLIENTE : F_FORNITORE, tc.sottoconto()); - set_cgs_row(-1,zero,tc,desc,tipo); - } - } } @@ -708,11 +710,6 @@ void TPrimanota_application::mask2rel(const TMask& m) real imposta(row.get()); if (to_swap) imposta = -imposta; - if (imponibile.sign() * imposta.sign() < 0) - { - yesnofatal_box("Registrazione di imponibile e imposta discordi"); - imposta = -imposta; - } r.put("IMPOSTA", imposta); r.put("TIPOCR", row.get()); diff --git a/cg/cg2100.h b/cg/cg2100.h index 978a9ffce..d83cf15c3 100755 --- a/cg/cg2100.h +++ b/cg/cg2100.h @@ -53,6 +53,8 @@ #define F_AVERE 138 #define F_IMPONIBILI 139 #define F_IMPOSTE 140 +#define F_VALUTAINTRA 141 +#define F_CAMBIOINTRA 142 #define F_SHEETCG 300 #define F_SHEETIVA 301 diff --git a/cg/cg2100c.uml b/cg/cg2100c.uml index eefcff61b..78cb65b2f 100755 --- a/cg/cg2100c.uml +++ b/cg/cg2100c.uml @@ -503,22 +503,51 @@ BEGIN CHECKTYPE REQUIRED END +STRING F_VALUTAINTRA 3 +BEGIN + PROMPT 1 17 "Valuta intracom. " + HELP "Codice della valuta per operazione intracomunitaria" + FIELD CODVALI + FLAGS "U" + GROUP 3 + USE %VAL + INPUT CODTAB F_VALUTAINTRA + DISPLAY "Codice" CODTAB + DISPLAY "Nome@50" S0 + DISPLAY "Cambio@15" R10 + DISPLAY "Ultimo aggiornamento" D0 + OUTPUT F_VALUTAINTRA CODTAB + OUTPUT F_CAMBIOINTRA R10 + CHECKTYPE NORMAL + WARNING "Codice valuta assente" +END + +NUMBER F_CAMBIOINTRA 12 5 +BEGIN + PROMPT 37 17 "Cambio intracom. " + HELP "Cambio della valuta per operazione intracomunitaria" + FIELD CAMBIOI + FLAGS "RU" + GROUP 3 + PICTURE ".5" +END + NUMBER F_CORRLIRE 15 BEGIN - PROMPT 1 16 "Corrispettivo Lire " - HELP "Corrispettivo in Lit. per operazioni intracomunitarie" + PROMPT 1 18 "Corrispettivo Lire " + HELP "Corrispettivo in Lit. per operazioni intracomunitarie. Il tasto F8 lo pone uguale alla somma degli imponibili" FIELD LF_MOV->CORRLIRE FLAGS "R" PICTURE "." END -NUMBER F_CORRVALUTA 15 +NUMBER F_CORRVALUTA 15 2 BEGIN - PROMPT 45 16 "Corrisp. valuta " + PROMPT 37 18 "Corrispettivo valuta " HELP "Corrispettivo in valuta per operazioni intracomunitarie" FIELD LF_MOV->CORRVALUTA FLAGS "R" - PICTURE "." + PICTURE ".2" END ENDPAGE @@ -611,14 +640,14 @@ END NUMBER F_DARE 15 BEGIN - PROMPT 1 -1 "Sbilancio Dare " + PROMPT 1 18 "Sbilancio Dare " FLAGS "DRV" PICTURE "." END NUMBER F_AVERE 15 BEGIN - PROMPT 41 -1 "Sbilancio Avere " + PROMPT 41 18 "Sbilancio Avere " FLAGS "DRV" PICTURE "." END diff --git a/cg/cg2101.cpp b/cg/cg2101.cpp index a85faa58e..cc0dfb077 100755 --- a/cg/cg2101.cpp +++ b/cg/cg2101.cpp @@ -245,11 +245,6 @@ int TMovimentoPN::registra(bool re, bool force) cancella(ri, i+1, _oldiva); _oldiva = iva_items(); - // Aggiorna data registrazione sul libro giornale - const TDate datareg(m.get("DATAREG")); - TLibro_giornale gio(date2esc(datareg)); - gio.update(0L, datareg); - // Aggiorna data registrazione e protocollo IVA sul registro if (reg.not_empty()) { diff --git a/cg/cg2102.cpp b/cg/cg2102.cpp index 95dc04ad8..7a47b340c 100755 --- a/cg/cg2102.cpp +++ b/cg/cg2102.cpp @@ -413,6 +413,18 @@ void TPrimanota_application::cgs_pack() } +bool TPrimanota_application::ci_sono_importi() const +{ + TArray& rows = cgs().rows_array(); + for (int i = 0; i < rows.items(); i++) + { + TToken_string& r = (TToken_string&)rows[i]; + if (r.get_char(0) > '0') return TRUE; + if (r.get_char() > '0') return TRUE; + } + return FALSE; +} + real TPrimanota_application::calcola_saldo() const { TArray& rows = cgs().rows_array(); @@ -1114,7 +1126,11 @@ bool TPrimanota_application::caus_modify_handler(TMask_field& f, KEY key) ok = app().causale().similar(c); if (!ok) return FALSE; - app().causale().read(cau, ann); + if (key == K_TAB) + { + app().read_caus(cau, ann); + app().cgs().force_update(); + } } return TRUE; @@ -1566,6 +1582,72 @@ bool TPrimanota_application::visval_handler(TMask_field& f, KEY key) return TRUE; } +// Handler of F_CORRLIRE +// Certified 99% +bool TPrimanota_application::corrlire_handler(TMask_field& f, KEY key) +{ + TMask& m = f.mask(); + + if (key == K_ENTER && f.get().empty()) + { + if (m.get(F_CORRVALUTA).not_empty()) + m.field(F_CORRVALUTA).on_hit(); + else + key == K_F8; + } + + if (key == K_F8) + { + f.set(m.get(F_IMPONIBILI)); + f.set_dirty(); + m.reset(F_CORRVALUTA); + key = K_TAB; + } + if (key == K_TAB && f.focusdirty()) + { + if (m.get(F_CORRVALUTA).empty()) + { + const real cambio = m.get(F_CAMBIOINTRA); + if (cambio != ZERO && m.get(F_CORRVALUTA).empty()) + { + real c = f.get(); + c /= cambio; + m.set(F_CORRVALUTA, c.string()); + } + } + } + + return TRUE; +} + +// Handler of F_CORRVALUTA +// Certified 99% +bool TPrimanota_application::corrvaluta_handler(TMask_field& f, KEY key) +{ + if (key == K_TAB && f.focusdirty()) + { + TMask& m = f.mask(); + if (m.get(F_CORRLIRE).empty()) + { + const real cambio = m.get(F_CAMBIOINTRA); + if (cambio != ZERO) + { + real c = f.get(); + c *= cambio; + m.set(F_CORRLIRE, c.string()); + } + } + } else + if (key == K_ENTER && f.get().empty()) + { + TMask_field& cl = f.mask().field(F_CORRLIRE); + cl.set_dirty(); + cl.on_hit(); + } + + return TRUE; +} + bool TPrimanota_application::solaiva_handler(TMask_field& f, KEY key) { diff --git a/cg/cg2102.h b/cg/cg2102.h index 39949d835..8afdfcf8b 100755 --- a/cg/cg2102.h +++ b/cg/cg2102.h @@ -68,6 +68,8 @@ class TPrimanota_application : public TRelation_application static bool main_codiva_handler(TMask_field& f, KEY key); static bool cambio_handler(TMask_field& f, KEY key); static bool visval_handler(TMask_field& f, KEY key); + static bool corrlire_handler(TMask_field& f, KEY key); + static bool corrvaluta_handler(TMask_field& f, KEY key); static bool occas_code_handler(TMask_field& f, KEY key); static bool occas_handler(TMask_field& f, KEY key); static bool solaiva_handler(TMask_field& f, KEY key); @@ -157,6 +159,7 @@ protected: TImporto sub_cgs_imp(int n, const real& imp); void cgs_pack(); + bool ci_sono_importi() const; real calcola_saldo() const; real calcola_imp() const; diff --git a/cg/cg21iva.uml b/cg/cg21iva.uml index 6cf14cb3f..ac13628c0 100755 --- a/cg/cg21iva.uml +++ b/cg/cg21iva.uml @@ -52,7 +52,7 @@ END NUMBER 101 15 BEGIN PROMPT 2 4 "Imponibile " - HELP "Importo imponibile della riga" + HELP "Importo imponibile" FLAGS "RV" PICTURE "." END @@ -60,7 +60,7 @@ END NUMBER 104 15 BEGIN PROMPT 48 4 "Imposta " - HELP "Imporot dell'IVA della riga" + HELP "Importo dell'IVA. Se e' nullo, col tasto F8 si puo' effettuare lo scorporo" FLAGS "RV" PICTURE "." END @@ -73,7 +73,7 @@ END LIST 106 1 12 BEGIN PROMPT 2 7 "Tipo " - HELP "Tipo del conto della riga" + HELP "Tipo del conto" FIELD TMCF ITEM " |Conto" MESSAGE SHOW,109|HIDE,209|HIDE,309|SHOW,110|HIDE,210|HIDE,310 @@ -87,14 +87,14 @@ END NUMBER 107 3 BEGIN PROMPT 22 7 "Gruppo " - HELP "Codice del conto della riga" + HELP "Codice del gruppo" FIELD GRUPPO END NUMBER 108 3 BEGIN PROMPT 38 7 "Conto " - HELP "Codice del conto della riga" + HELP "Codice del conto" FIELD CONTO USE LF_PCON SELECT (CONTO!="") && (SOTTOCONTO="") INPUT GRUPPO 107 @@ -117,7 +117,7 @@ END NUMBER 109 6 BEGIN PROMPT 55 7 "Sottoconto " - HELP "Codice del conto della riga" + HELP "Codice del sottoconto" FIELD SOTTOCONTO USE LF_PCON SELECT SOTTOCONTO!="" INPUT GRUPPO 107 @@ -142,7 +142,7 @@ END NUMBER 209 6 BEGIN PROMPT 55 7 "Cliente " - HELP "Codice del cliente della riga" + HELP "Codice del cliente" USE LF_CLIFO INPUT TIPOCF "C" INPUT CODCF 209 @@ -162,7 +162,7 @@ END NUMBER 309 6 BEGIN PROMPT 55 7 "Fornitore " - HELP "Codice del fornitore della riga" + HELP "Codice del fornitore" USE LF_CLIFO INPUT TIPOCF "F" INPUT CODCF 309 @@ -182,7 +182,7 @@ END STRING 110 50 BEGIN PROMPT 2 8 "Descrizione " - HELP "Descrizione del conto della riga" + HELP "Descrizione del conto" FIELD LF_PCON->DESCR USE LF_PCON KEY 2 INPUT DESCR 110 @@ -198,7 +198,7 @@ END STRING 210 50 BEGIN PROMPT 2 8 "Cliente " - HELP "Ragione sociale del cliente della riga" + HELP "Ragione sociale del cliente" FIELD LF_CLIFO->RAGSOC USE LF_CLIFO KEY 2 INPUT TIPOCF "C" @@ -216,7 +216,7 @@ END STRING 310 50 BEGIN PROMPT 2 8 "Fornitore " - HELP "Ragione sociale del forntore della riga" + HELP "Ragione sociale del forntore" FIELD LF_PCON->SOTTOCONTO USE LF_CLIFO KEY 2 INPUT TIPOCF "F" @@ -242,7 +242,7 @@ BEGIN ITEM "5|5. Beni per rivendita da non ventilare" ITEM "8|8. Altri beni strumentali acquistati in leasing" FLAGS "D" - HELP "Indicare il tipo Costo/Ricavo del conto" + HELP "Tipo Costo/Ricavo del conto" END BUTTON DLG_OK 9 2