Aggiunta valuta intra in prima nota

Resa selezionabile la descrizione aggiuntiva nelle causali
Riveduta la gestione vendite nei clifo


git-svn-id: svn://10.65.10.50/trunk@663 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1994-11-18 16:48:53 +00:00
parent 3025e549ed
commit 0d1752b7f2
15 changed files with 410 additions and 299 deletions

View File

@ -1,11 +1,10 @@
#include <relapp.h>
#include <modaut.h>
#include <utility.h>
#include <validate.h>
#include <msksheet.h>
#include <sheet.h>
#include <config.h> #include <config.h>
#include <defmask.h> #include <defmask.h>
#include <relapp.h>
#include <msksheet.h>
#include <sheet.h>
#include <utility.h>
#include <validate.h>
#include <pconti.h> #include <pconti.h>
#include <clifo.h> #include <clifo.h>
@ -19,11 +18,10 @@
#include "cg0200.h" #include "cg0200.h"
#include "cg0201.h" #include "cg0201.h"
class TClifo_application : public TRelation_application class TClifo_application : public TRelation_application
{ {
TMask* _msk; TMask* _msk;
TClifoVI *_rel; TClifoVI* _rel;
TLocalisamfile* _mov; TLocalisamfile* _mov;
TLocalisamfile* _anag; TLocalisamfile* _anag;
TLocalisamfile* _fis; TLocalisamfile* _fis;
@ -224,7 +222,6 @@ HIDDEN bool autoexit_handler(TMask_field& f, KEY key)
} }
bool TClifo_application::tipo_handler(TMask_field& f, KEY key) bool TClifo_application::tipo_handler(TMask_field& f, KEY key)
{ {
TMask& m = f.mask(); TMask& m = f.mask();
@ -359,19 +356,14 @@ void TClifo_application::init_pages(TMask& m)
_lbcn = conf.get_bool("GsLbCn"); _lbcn = conf.get_bool("GsLbCn");
_gesven = conf.get_bool("GesVen"); _gesven = conf.get_bool("GesVen");
_rel->gestione_vendite(_gesven);
m.send_key(K_SHIFT + K_CTRL + (_lbcn ? 's' : 'h'), -5); m.send_key(K_SHIFT + K_CTRL + (_lbcn ? 's' : 'h'), -5);
// Se non e' abilitata la gestione delle vendite disabilita le // Se non e' abilitata la gestione delle vendite disabilita le
// maschere dalla 4 in poi // maschere dalla 4 in poi
if (_gesven) for (int j = 3; j < 8;j++)
{ m.enable_page(j, _gesven);
for (int j=3; j<8;j++)
m.enable_page(j);
}
else
{
for (int j=3; j<8;j++)
m.disable_page(j);
}
} }
void TClifo_application::init_query_mode(TMask& m) void TClifo_application::init_query_mode(TMask& m)
@ -387,9 +379,11 @@ void TClifo_application::init_query_mode(TMask& m)
int TClifo_application::read(TMask& m) int TClifo_application::read(TMask& m)
{ {
TToken_string riga(240); TRelation_application::read(m);
m.autoload(_rel); if (_gesven)
{
TToken_string riga(240);
indsp_sheet().reset(); indsp_sheet().reset();
for (int i=0; i< _rel->indirizzi_items();i++) for (int i=0; i< _rel->indirizzi_items();i++)
{ {
@ -421,26 +415,27 @@ int TClifo_application::read(TMask& m)
field_sheet(F_CODINDSP)->add(riga); field_sheet(F_CODINDSP)->add(riga);
field_sheet(F_CODINDEFF)->add(riga); field_sheet(F_CODINDEFF)->add(riga);
} }
}
return _rel->status(); return _rel->status();
} }
int TClifo_application::rewrite(const TMask& m) int TClifo_application::rewrite(const TMask& m)
{ {
common_f(m); common_f(m);
return _rel->rewrite(TRUE); return TRelation_application::rewrite(m);
} }
int TClifo_application::write(const TMask& m) int TClifo_application::write(const TMask& m)
{ {
common_f(m); common_f(m);
return _rel->write(TRUE); return TRelation_application::write(m);
} }
TArray_sheet* TClifo_application::field_sheet(const int n) const TArray_sheet* TClifo_application::field_sheet(const int n) const
{ {
TEdit_field& f=(TEdit_field&) _msk->field(n); TEdit_field& f=(TEdit_field&) _msk->field(n);
TArray_sheet* S=(TArray_sheet*) f.sheet()->sheet(); TArray_sheet* ss=(TArray_sheet*) f.sheet()->sheet();
return S; return ss;
} }
TSheet_field& TClifo_application::indsp_sheet() const TSheet_field& TClifo_application::indsp_sheet() const
@ -477,15 +472,17 @@ void TClifo_application::indsp_pack()
void TClifo_application::common_f(const TMask& m) void TClifo_application::common_f(const TMask& m)
{ {
char tipocf = m.get(F_TIPOCF)[0]; if (_gesven)
long codcf = m.get_long(F_CODCF); {
_rel->lfile().zero(); const char tipocf = m.get(F_TIPOCF)[0];
m.autosave(_rel); const long codcf = m.get_long(F_CODCF);
_rel->destroy_rows(); _rel->destroy_rows();
indsp_pack(); indsp_pack();
TArray& rows=indsp_sheet().rows_array(); TArray& rows=indsp_sheet().rows_array();
int n_items = rows.items(); int n_items = rows.items();
for (int i=0; i<n_items;i++)
for (int i = 0; i < n_items; i++)
{ {
TToken_string& row=(TToken_string&)rows[i]; TToken_string& row=(TToken_string&)rows[i];
TRectype& rec=_rel->indirizzo(i); TRectype& rec=_rel->indirizzo(i);
@ -507,6 +504,7 @@ void TClifo_application::common_f(const TMask& m)
rec.put(IND_IVARID,row.get()); rec.put(IND_IVARID,row.get());
rec.put(IND_CODIND,i+1); rec.put(IND_CODIND,i+1);
} }
}
} }
bool TClifo_application::indsp_handler(TMask_field& f, KEY key) bool TClifo_application::indsp_handler(TMask_field& f, KEY key)
@ -524,7 +522,6 @@ bool TClifo_application::indsp_handler(TMask_field& f, KEY key)
{ {
TToken_string& riga=(TToken_string&)righe[i]; TToken_string& riga=(TToken_string&)righe[i];
TToken_string rigav; TToken_string rigav;
riga.restart();
rigav.add(riga.get(12)); rigav.add(riga.get(12));
rigav.add(riga.get(0)); rigav.add(riga.get(0));
rigav.add(riga.get()); rigav.add(riga.get());
@ -560,11 +557,6 @@ bool TClifo_application::indsp_notify(int r, KEY key)
case K_INS: case K_INS:
// request to add the row #r // request to add the row #r
// To avoid rewriting of existing record. // To avoid rewriting of existing record.
if (indsp.items() >= 999)
{
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 // To avoid inserts in the middle of the sheet
if (r != -1 && indsp.items() > r) if (r != -1 && indsp.items() > r)
{ {

View File

@ -131,7 +131,7 @@ END
NUMBER F_CODINDI 3 NUMBER F_CODINDI 3
BEGIN BEGIN
PROMPT 1 1 "Codice " PROMPT 1 1 "Codice "
HELP "Codice riferito alla tabella indirizzi" FLAGS "D"
END END
BUTTON DLG_OK 9 2 BUTTON DLG_OK 9 2

View File

@ -1,20 +1,14 @@
#include <config.h>
#include "cg0201.h" #include "cg0201.h"
#include <clifo.h> #include <clifo.h>
#include <indsp.h> #include <indsp.h>
// Definizione dei metodi relativi alla classe TClifoVI // 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_CFVEN,"TIPOCF=TIPOCF|CODCF=CODCF");
add(LF_INDSP,"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() void TClifoVI::destroy_rows()
@ -36,18 +30,18 @@ TRectype& TClifoVI::indirizzo(int i)
int TClifoVI::read_indirizzi() int TClifoVI::read_indirizzi()
{ {
destroy_rows();
if (_gesven) if (_gesven)
{ {
const TLocalisamfile& rind = lfile(LF_INDSP); const TLocalisamfile& rind = lfile(LF_INDSP);
position_rels(); position_rels();
destroy_rows();
for (bool ok=is_first_match(LF_INDSP); ok; ok=next_match(LF_INDSP)) for (bool ok=is_first_match(LF_INDSP); ok; ok=next_match(LF_INDSP))
{ {
const int nriga=rind.get_int(IND_CODIND) -1; const int nriga=rind.get_int(IND_CODIND) -1;
indirizzo(nriga)=rind.curr(); indirizzo(nriga)=rind.curr();
} }
}
_oldindirizzi=indirizzi_items(); _oldindirizzi=indirizzi_items();
}
return NOERR; return NOERR;
} }

View File

@ -32,6 +32,8 @@ public:
int indirizzi_items() const {return _indirizzi.items();} int indirizzi_items() const {return _indirizzi.items();}
void destroy_rows(); void destroy_rows();
void gestione_vendite(bool gv) { _gesven = gv; }
TClifoVI(); TClifoVI();
virtual ~TClifoVI() {} virtual ~TClifoVI() {}
}; };

View File

@ -22,6 +22,13 @@ typedef enum { no_descr, acquisto, vendita, incasso_pagamento,
class TCaus_app : public TRelation_application 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. int _filtro; // tipo di filtro su tab. reg.
// 1 vendite senza corrisp // 1 vendite senza corrisp
// 2 vendite con corrisp // 2 vendite con corrisp
@ -49,22 +56,15 @@ protected:
static bool m770_hndl (TMask_field& f, KEY k); static bool m770_hndl (TMask_field& f, KEY k);
static bool ss_notify (int r, 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 togli_dal_file(const TString&);
void read_rcaus(TMask&); void read_rcaus(TMask&);
bool fill_sheet(TMask&); bool fill_sheet(TMask&);
void set_descr (int numrig=-1, const char * descr=""); void set_descr (int numrig, const char* descr);
void clear(int riga); // pulisce una riga in seguito ad Azzera void clear(int riga);
void clear_descr(); // cancella solo le descrizioni fisse void clear_descr();
void carica_righe_libere(); void carica_righe_libere(int from = -1);
void causale_inc_pag(); void causale_inc_pag();
void causale_ritenute (); void causale_ritenute ();
void causale_vendite (); void causale_vendite ();
@ -159,33 +159,35 @@ void TCaus_app::set_descr(int i, const char * dfi)
r.add(dfi, 0); 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++) if (from < 0) from = ss().items();
set_descr(i); for (int i = from; i < 20; i++)
set_descr(i, "");
ss().force_update(); ss().force_update();
} }
// Cancella tutte le descrizioni delle righe // Cancella tutte le descrizioni delle righe
void TCaus_app::clear_descr() void TCaus_app::clear_descr()
{ {
if (_tipo_des != no_descr)
{
TArray& a = ss().rows_array(); TArray& a = ss().rows_array();
for (int i=0; i < a.items(); i++) for (int i = 0; i < a.items(); i++)
{ {
TToken_string& r = (TToken_string&)a[i]; TToken_string& r = (TToken_string&)a[i];
r.add("", 0); r.add("", 0);
} }
app()._tipo_des = no_descr; carica_righe_libere();
_tipo_des = no_descr;
}
} }
void TCaus_app::causale_vendite() void TCaus_app::causale_vendite()
{ {
if (_tipo_des == vendita) if (_tipo_des != vendita)
return; {
int i = 0;
_tipo_des = vendita;
int i=0;
set_descr(i++, "C Clienti"); set_descr(i++, "C Clienti");
set_descr(i++, "C Di ricavo"); set_descr(i++, "C Di ricavo");
set_descr(i++, "C Iva vendite"); set_descr(i++, "C Iva vendite");
@ -195,17 +197,17 @@ void TCaus_app::causale_vendite()
set_descr(i++, "C Imp. non soggetti"); set_descr(i++, "C Imp. non soggetti");
set_descr(i++, "C Ritenute fiscali"); set_descr(i++, "C Ritenute fiscali");
set_descr(i++, "C Ritenute soc."); set_descr(i++, "C Ritenute soc.");
carica_righe_libere(i);
_tipo_des = vendita;
}
} }
void TCaus_app::causale_acquisti() void TCaus_app::causale_acquisti()
{ {
if (_tipo_des == acquisto) if (_tipo_des != acquisto)
return; {
int i = 0;
_tipo_des = acquisto;
int i=0;
set_descr( i++, "C Fornitori"); set_descr( i++, "C Fornitori");
set_descr(i++, "C Di costo"); set_descr(i++, "C Di costo");
set_descr(i++, "C Iva acquisti"); set_descr(i++, "C Iva acquisti");
@ -215,31 +217,31 @@ void TCaus_app::causale_acquisti()
set_descr(i++, "C Imp. non soggetti"); set_descr(i++, "C Imp. non soggetti");
set_descr(i++, "C Ritenute fiscali"); set_descr(i++, "C Ritenute fiscali");
set_descr(i++, "C Ritenute soc."); set_descr(i++, "C Ritenute soc.");
carica_righe_libere(i);
_tipo_des = acquisto;
}
} }
void TCaus_app::causale_ritenute() void TCaus_app::causale_ritenute()
{ {
if (_tipo_des == ritenuta_occas) if (_tipo_des != ritenuta_occas)
return; {
int i = 0;
_tipo_des = ritenuta_occas;
int i=0;
set_descr (i++, "Costo"); set_descr (i++, "Costo");
set_descr (i++, "Cassa/banca"); set_descr (i++, "Cassa/banca");
set_descr (i++, "Erario"); set_descr (i++, "Erario");
carica_righe_libere(i);
_tipo_des = ritenuta_occas;
}
} }
void TCaus_app::causale_inc_pag() void TCaus_app::causale_inc_pag()
{ {
const tipo_descr tipo_des = valuta() ? incasso_pagamento_gesval : incasso_pagamento; const tipo_descr tipo_des = valuta() ? incasso_pagamento_gesval : incasso_pagamento;
if (_tipo_des == tipo_des) if (_tipo_des != tipo_des)
return; {
int i = 0;
_tipo_des = tipo_des;
int i=0;
set_descr ( i++, "C Clienti/Fornitori"); set_descr ( i++, "C Clienti/Fornitori");
set_descr ( i++, "C Cassa o banca"); set_descr ( i++, "C Cassa o banca");
set_descr ( i++, "C Tratta"); set_descr ( i++, "C Tratta");
@ -253,6 +255,9 @@ void TCaus_app::causale_inc_pag()
set_descr ( i++, "C Ritenute fiscali"); set_descr ( i++, "C Ritenute fiscali");
if (_tipo_des == incasso_pagamento_gesval) if (_tipo_des == incasso_pagamento_gesval)
set_descr (i++, "C Differenza cambio"); set_descr (i++, "C Differenza cambio");
carica_righe_libere(i);
_tipo_des = tipo_des;
}
} }
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
@ -373,10 +378,9 @@ bool TCaus_app::codcausim_hndl (TMask_field& f, KEY k)
if (caus.read() == NOERR) if (caus.read() == NOERR)
{ {
const int tpm = caus.get_int(CAU_TIPOMOV); const int tpm = caus.get_int(CAU_TIPOMOV);
TString16 codreg = caus.get(CAU_REG); const TString& codreg = caus.get(CAU_REG);
if (codreg.not_empty() || tpm != 0) if (codreg.not_empty() || tpm != 0)
return f.warning_box("La causale per l'incasso immediato specificata (%s) deve essere puramente contabile", return f.warning_box("La causale per l'incasso/pagamento immediato deve essere puramente contabile");
(const char *) causim);
} }
} }
return TRUE; return TRUE;
@ -395,7 +399,7 @@ bool TCaus_app::mostra_campi(TMask_field& f)
m.hide(F_FAT_RITARDO); m.hide(F_FAT_RITARDO);
m.hide(F_OP_INTRACOM); m.hide(F_OP_INTRACOM);
m.hide(F_VALINTRA); m.hide(F_VALINTRA);
// if (salda_conto())
m.hide(F_COD_CAUS_IM); m.hide(F_COD_CAUS_IM);
switch (tpm) 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) 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") if (tpd.empty() || tpd == "IN" || tpd == "AN" || tpd == "PG")
{ {
switch (tpm) switch (tpm)
@ -618,18 +620,22 @@ void TCaus_app::compila_array(const TString& tpd, int tpm, int tpr, int m770)
if (m770 == 6) if (m770 == 6)
causale_ritenute(); causale_ritenute();
default: default:
clear_descr();
break; break;
} }
} }
else // C'e' il tipodoc. else // C'e' il tipodoc.
{ {
if (tpr == 1) switch (tpr)
causale_vendite(); {
else case 1:
if (tpr == 2) causale_vendite(); break;
causale_acquisti(); case 2:
causale_acquisti(); break;
default:
clear_descr(); break;
}
} }
carica_righe_libere();
} }

View File

@ -35,3 +35,4 @@
#define SS_CONTO 105 #define SS_CONTO 105
#define SS_SOTTOCONTO 106 #define SS_SOTTOCONTO 106
#define SS_DESCAGG 108 #define SS_DESCAGG 108
#define SS_DESCRIPTION 109

View File

@ -34,7 +34,7 @@ BEGIN
MESSAGE COPY, F_COD_CAUS2 MESSAGE COPY, F_COD_CAUS2
END END
STRING F_DESCR 40 STRING F_DESCR 50
BEGIN BEGIN
PROMPT 17 1 "Descrizione " PROMPT 17 1 "Descrizione "
FIELD LF_CAUSALI->DESCR FIELD LF_CAUSALI->DESCR

View File

@ -184,6 +184,7 @@ BEGIN
OUTPUT 206 CODCF OUTPUT 206 CODCF
OUTPUT 207 RAGSOC OUTPUT 207 RAGSOC
GROUP 1 GROUP 1
ADD RUN CG0 -1 C
END END
// Descrizione FORNITORE // Descrizione FORNITORE
@ -203,6 +204,7 @@ BEGIN
OUTPUT 306 CODCF OUTPUT 306 CODCF
OUTPUT 307 RAGSOC OUTPUT 307 RAGSOC
GROUP 1 GROUP 1
ADD RUN CG0 -1 F
END END
STRING SS_DESCAGG 5 STRING SS_DESCAGG 5
@ -216,16 +218,22 @@ BEGIN
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
DISPLAY "Descrizione @50" S0 DISPLAY "Descrizione @50" S0
OUTPUT SS_DESCAGG CODTAB OUTPUT SS_DESCAGG CODTAB
OUTPUT 109 S0 OUTPUT SS_DESCRIPTION S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Codice descrizione aggiuntiva assente" WARNING "Codice descrizione aggiuntiva errato"
GROUP 1 GROUP 1
END END
STRING 109 50 STRING SS_DESCRIPTION 50
BEGIN BEGIN
PROMPT 1 8 "" 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 GROUP 1
END END

View File

@ -63,6 +63,8 @@ TMask* TPrimanota_application::load_mask(int n)
m->set_handler(F_TOTALE, totale_handler); m->set_handler(F_TOTALE, totale_handler);
m->set_handler(F_RITFIS, ritfis_handler); m->set_handler(F_RITFIS, ritfis_handler);
m->set_handler(F_RITSOC, ritsoc_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_CODIVA, main_codiva_handler);
m->set_handler(F_OCCASEDIT, occas_handler); m->set_handler(F_OCCASEDIT, occas_handler);
m->set_handler(F_SOLAIVA, solaiva_handler); m->set_handler(F_SOLAIVA, solaiva_handler);
@ -182,9 +184,9 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
if (ok) if (ok)
{ {
nob = _causale.num_doc();
dob = _causale.data_doc();
sal = gestione_saldaconto() && _causale.saldaconto(); sal = gestione_saldaconto() && _causale.saldaconto();
dob = sal | _causale.data_doc();
nob = sal | _causale.num_doc();
iva = _causale.iva(); 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_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 m->efield(F_DATADOC).check_type(dob ? CHECK_REQUIRED : CHECK_NORMAL); // Data doc. obbligatoria
if (iva != nessuna_iva) if (iva != nessuna_iva)
{ {
const CheckType ct = sal ? CHECK_REQUIRED : CHECK_NORMAL; 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); 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; return ok;
} }
@ -228,15 +278,12 @@ bool TPrimanota_application::changing_mask(int mode)
const bool flag = _mode != MODE_QUERY; const bool flag = _mode != MODE_QUERY;
if (flag && _iva != nessuna_iva && !_iva_showed) if (flag && _iva != nessuna_iva && !_iva_showed)
{
if (!ivas().dirty())
{ {
WINDOW w = ivas().parent(); WINDOW w = ivas().parent();
show_window(w, TRUE); show_window(w, TRUE);
set_front_window(w); set_front_window(w);
process_events(); process_events();
show_window(w, FALSE); show_window(w, FALSE);
}
_iva_showed = TRUE; _iva_showed = TRUE;
} }
@ -391,51 +438,6 @@ void TPrimanota_application::init_insert_mode(TMask& m)
const long protiva = causale().reg().protocol(); const long protiva = causale().reg().protocol();
m.set(F_PROTIVA, protiva+1); 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()); real imposta(row.get());
if (to_swap) imposta = -imposta; 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("IMPOSTA", imposta);
r.put("TIPOCR", row.get()); r.put("TIPOCR", row.get());

View File

@ -53,6 +53,8 @@
#define F_AVERE 138 #define F_AVERE 138
#define F_IMPONIBILI 139 #define F_IMPONIBILI 139
#define F_IMPOSTE 140 #define F_IMPOSTE 140
#define F_VALUTAINTRA 141
#define F_CAMBIOINTRA 142
#define F_SHEETCG 300 #define F_SHEETCG 300
#define F_SHEETIVA 301 #define F_SHEETIVA 301

View File

@ -503,22 +503,51 @@ BEGIN
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END 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 NUMBER F_CORRLIRE 15
BEGIN BEGIN
PROMPT 1 16 "Corrispettivo Lire " PROMPT 1 18 "Corrispettivo Lire "
HELP "Corrispettivo in Lit. per operazioni intracomunitarie" HELP "Corrispettivo in Lit. per operazioni intracomunitarie. Il tasto F8 lo pone uguale alla somma degli imponibili"
FIELD LF_MOV->CORRLIRE FIELD LF_MOV->CORRLIRE
FLAGS "R" FLAGS "R"
PICTURE "." PICTURE "."
END END
NUMBER F_CORRVALUTA 15 NUMBER F_CORRVALUTA 15 2
BEGIN BEGIN
PROMPT 45 16 "Corrisp. valuta " PROMPT 37 18 "Corrispettivo valuta "
HELP "Corrispettivo in valuta per operazioni intracomunitarie" HELP "Corrispettivo in valuta per operazioni intracomunitarie"
FIELD LF_MOV->CORRVALUTA FIELD LF_MOV->CORRVALUTA
FLAGS "R" FLAGS "R"
PICTURE "." PICTURE ".2"
END END
ENDPAGE ENDPAGE
@ -611,14 +640,14 @@ END
NUMBER F_DARE 15 NUMBER F_DARE 15
BEGIN BEGIN
PROMPT 1 -1 "Sbilancio Dare " PROMPT 1 18 "Sbilancio Dare "
FLAGS "DRV" FLAGS "DRV"
PICTURE "." PICTURE "."
END END
NUMBER F_AVERE 15 NUMBER F_AVERE 15
BEGIN BEGIN
PROMPT 41 -1 "Sbilancio Avere " PROMPT 41 18 "Sbilancio Avere "
FLAGS "DRV" FLAGS "DRV"
PICTURE "." PICTURE "."
END END

View File

@ -245,11 +245,6 @@ int TMovimentoPN::registra(bool re, bool force)
cancella(ri, i+1, _oldiva); cancella(ri, i+1, _oldiva);
_oldiva = iva_items(); _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 // Aggiorna data registrazione e protocollo IVA sul registro
if (reg.not_empty()) if (reg.not_empty())
{ {

View File

@ -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 real TPrimanota_application::calcola_saldo() const
{ {
TArray& rows = cgs().rows_array(); 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); ok = app().causale().similar(c);
if (!ok) return FALSE; if (!ok) return FALSE;
app().causale().read(cau, ann); if (key == K_TAB)
{
app().read_caus(cau, ann);
app().cgs().force_update();
}
} }
return TRUE; return TRUE;
@ -1566,6 +1582,72 @@ bool TPrimanota_application::visval_handler(TMask_field& f, KEY key)
return TRUE; 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) bool TPrimanota_application::solaiva_handler(TMask_field& f, KEY key)
{ {

View File

@ -68,6 +68,8 @@ class TPrimanota_application : public TRelation_application
static bool main_codiva_handler(TMask_field& f, KEY key); static bool main_codiva_handler(TMask_field& f, KEY key);
static bool cambio_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 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_code_handler(TMask_field& f, KEY key);
static bool occas_handler(TMask_field& f, KEY key); static bool occas_handler(TMask_field& f, KEY key);
static bool solaiva_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); TImporto sub_cgs_imp(int n, const real& imp);
void cgs_pack(); void cgs_pack();
bool ci_sono_importi() const;
real calcola_saldo() const; real calcola_saldo() const;
real calcola_imp() const; real calcola_imp() const;

View File

@ -52,7 +52,7 @@ END
NUMBER 101 15 NUMBER 101 15
BEGIN BEGIN
PROMPT 2 4 "Imponibile " PROMPT 2 4 "Imponibile "
HELP "Importo imponibile della riga" HELP "Importo imponibile"
FLAGS "RV" FLAGS "RV"
PICTURE "." PICTURE "."
END END
@ -60,7 +60,7 @@ END
NUMBER 104 15 NUMBER 104 15
BEGIN BEGIN
PROMPT 48 4 "Imposta " 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" FLAGS "RV"
PICTURE "." PICTURE "."
END END
@ -73,7 +73,7 @@ END
LIST 106 1 12 LIST 106 1 12
BEGIN BEGIN
PROMPT 2 7 "Tipo " PROMPT 2 7 "Tipo "
HELP "Tipo del conto della riga" HELP "Tipo del conto"
FIELD TMCF FIELD TMCF
ITEM " |Conto" ITEM " |Conto"
MESSAGE SHOW,109|HIDE,209|HIDE,309|SHOW,110|HIDE,210|HIDE,310 MESSAGE SHOW,109|HIDE,209|HIDE,309|SHOW,110|HIDE,210|HIDE,310
@ -87,14 +87,14 @@ END
NUMBER 107 3 NUMBER 107 3
BEGIN BEGIN
PROMPT 22 7 "Gruppo " PROMPT 22 7 "Gruppo "
HELP "Codice del conto della riga" HELP "Codice del gruppo"
FIELD GRUPPO FIELD GRUPPO
END END
NUMBER 108 3 NUMBER 108 3
BEGIN BEGIN
PROMPT 38 7 "Conto " PROMPT 38 7 "Conto "
HELP "Codice del conto della riga" HELP "Codice del conto"
FIELD CONTO FIELD CONTO
USE LF_PCON SELECT (CONTO!="") && (SOTTOCONTO="") USE LF_PCON SELECT (CONTO!="") && (SOTTOCONTO="")
INPUT GRUPPO 107 INPUT GRUPPO 107
@ -117,7 +117,7 @@ END
NUMBER 109 6 NUMBER 109 6
BEGIN BEGIN
PROMPT 55 7 "Sottoconto " PROMPT 55 7 "Sottoconto "
HELP "Codice del conto della riga" HELP "Codice del sottoconto"
FIELD SOTTOCONTO FIELD SOTTOCONTO
USE LF_PCON SELECT SOTTOCONTO!="" USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO 107 INPUT GRUPPO 107
@ -142,7 +142,7 @@ END
NUMBER 209 6 NUMBER 209 6
BEGIN BEGIN
PROMPT 55 7 "Cliente " PROMPT 55 7 "Cliente "
HELP "Codice del cliente della riga" HELP "Codice del cliente"
USE LF_CLIFO USE LF_CLIFO
INPUT TIPOCF "C" INPUT TIPOCF "C"
INPUT CODCF 209 INPUT CODCF 209
@ -162,7 +162,7 @@ END
NUMBER 309 6 NUMBER 309 6
BEGIN BEGIN
PROMPT 55 7 "Fornitore " PROMPT 55 7 "Fornitore "
HELP "Codice del fornitore della riga" HELP "Codice del fornitore"
USE LF_CLIFO USE LF_CLIFO
INPUT TIPOCF "F" INPUT TIPOCF "F"
INPUT CODCF 309 INPUT CODCF 309
@ -182,7 +182,7 @@ END
STRING 110 50 STRING 110 50
BEGIN BEGIN
PROMPT 2 8 "Descrizione " PROMPT 2 8 "Descrizione "
HELP "Descrizione del conto della riga" HELP "Descrizione del conto"
FIELD LF_PCON->DESCR FIELD LF_PCON->DESCR
USE LF_PCON KEY 2 USE LF_PCON KEY 2
INPUT DESCR 110 INPUT DESCR 110
@ -198,7 +198,7 @@ END
STRING 210 50 STRING 210 50
BEGIN BEGIN
PROMPT 2 8 "Cliente " PROMPT 2 8 "Cliente "
HELP "Ragione sociale del cliente della riga" HELP "Ragione sociale del cliente"
FIELD LF_CLIFO->RAGSOC FIELD LF_CLIFO->RAGSOC
USE LF_CLIFO KEY 2 USE LF_CLIFO KEY 2
INPUT TIPOCF "C" INPUT TIPOCF "C"
@ -216,7 +216,7 @@ END
STRING 310 50 STRING 310 50
BEGIN BEGIN
PROMPT 2 8 "Fornitore " PROMPT 2 8 "Fornitore "
HELP "Ragione sociale del forntore della riga" HELP "Ragione sociale del forntore"
FIELD LF_PCON->SOTTOCONTO FIELD LF_PCON->SOTTOCONTO
USE LF_CLIFO KEY 2 USE LF_CLIFO KEY 2
INPUT TIPOCF "F" INPUT TIPOCF "F"
@ -242,7 +242,7 @@ BEGIN
ITEM "5|5. Beni per rivendita da non ventilare" ITEM "5|5. Beni per rivendita da non ventilare"
ITEM "8|8. Altri beni strumentali acquistati in leasing" ITEM "8|8. Altri beni strumentali acquistati in leasing"
FLAGS "D" FLAGS "D"
HELP "Indicare il tipo Costo/Ricavo del conto" HELP "Tipo Costo/Ricavo del conto"
END END
BUTTON DLG_OK 9 2 BUTTON DLG_OK 9 2