Supporto per fattura PA

git-svn-id: svn://10.65.10.50/branches/R_10_00@22985 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2014-07-30 13:00:50 +00:00
parent c8daf4200d
commit ee688476cc
26 changed files with 332 additions and 272 deletions

View File

@ -50,14 +50,13 @@ COMCF = S_DISABILITATO
DENCOM = S_DISABILITATO DENCOM = S_DISABILITATO
STATOCF = S_DISABILITATO STATOCF = S_DISABILITATO
DESSTATOCF = S_DISABILITATO DESSTATOCF = S_DISABILITATO
CONTR122 = S_NORMALE PACONTRATTO = S_NORMALE
MODPAG = S_NORMALE PATIPOCON = S_NORMALE
CONTSEP = S_NORMALE CONTSEP = S_NORMALE
CODVAL1 = S_NORMALE CODVAL1 = S_NORMALE
CODVAL2 = S_NORMALE CODVAL2 = S_NORMALE
NOME_VAL1 = S_NORMALE NOME_VAL1 = S_NORMALE
NOME_VAL2 = S_NORMALE NOME_VAL2 = S_NORMALE
// CONTROEURO = S_NORMALE
CAMBIO = S_NORMALE CAMBIO = S_NORMALE
DATA_CAMBIO1 = S_NORMALE DATA_CAMBIO1 = S_NORMALE
DATA_CAMBIO2 = S_NORMALE DATA_CAMBIO2 = S_NORMALE

View File

@ -48,8 +48,8 @@ COMCF = S_DISABILITATO
DENCOM = S_DISABILITATO DENCOM = S_DISABILITATO
STATOCF = S_DISABILITATO STATOCF = S_DISABILITATO
DESSTATOCF = S_DISABILITATO DESSTATOCF = S_DISABILITATO
CONTR122 = S_NORMALE PACONTRATTO = S_NORMALE
MODPAG = S_NORMALE PATIPOCON = S_NORMALE
CONTSEP = S_NORMALE CONTSEP = S_NORMALE
CODVAL1 = S_NORMALE CODVAL1 = S_NORMALE
CODVAL2 = S_NORMALE CODVAL2 = S_NORMALE

View File

@ -1,3 +1,3 @@
33 33
0 0
$doc|0|0|625|0|Documenti di vendita||| $doc|0|0|652|0|Documenti di vendita|||

View File

@ -52,9 +52,9 @@ DATAPART|5|8|0|Data di partenza
ORAPART|1|4|0|Ora di partenza ORAPART|1|4|0|Ora di partenza
IMPPAGATO|4|18|2|Importo pagato IMPPAGATO|4|18|2|Importo pagato
ACCSALDO|8|1|0|Saldato Si/No ACCSALDO|8|1|0|Saldato Si/No
DOC1|1|16|0|Documento collegato 1 DOC1|1|25|0|Documento collegato 1
DOC2|1|16|0|Documento collegato 2 DOC2|1|25|0|Documento collegato 2
DOC3|1|16|0|Documento collegato 3 DOC3|1|25|0|Documento collegato 3
DATACONS|5|8|0|Data di consegna DATACONS|5|8|0|Data di consegna
ASPBENI1|1|3|0|Aspetto beni 1 ASPBENI1|1|3|0|Aspetto beni 1
ASPBENI2|1|3|0|Aspetto beni 2 ASPBENI2|1|3|0|Aspetto beni 2
@ -90,9 +90,9 @@ DATACOMP|5|8|0|Data inizio competenza in analitica
DATAFCOMP|5|8|0|Data fine competenza in analitica DATAFCOMP|5|8|0|Data fine competenza in analitica
CUP|1|15|0|Codice Unico di Progetto CUP|1|15|0|Codice Unico di Progetto
CIG|1|10|0|Codice Identificativo di Gara CIG|1|10|0|Codice Identificativo di Gara
MODPAG|1|1|0|Tipo contratto P.A.
CONTRATTO|1|20|0|Contratto fattura P.A. CONTRATTO|1|20|0|Contratto fattura P.A.
CONTSEP|1|6|0|Contabilita' separata CONTSEP|1|6|0|Contabilita' separata
PAF|8|1|0|PAF Generata
NOLEGGIO|1|1|0|Tipo noleggio (Spesometro) NOLEGGIO|1|1|0|Tipo noleggio (Spesometro)
5 5
PROVV+ANNO+CODNUM+NDOC| PROVV+ANNO+CODNUM+NDOC|

View File

@ -37,7 +37,7 @@ SCONTO|1|25|0|Sconto
PERCPROV|4|5|2|Percentuale di provvigione PERCPROV|4|5|2|Percentuale di provvigione
IMPFISSO|4|18|3|Importo fisso di provvigione IMPFISSO|4|18|3|Importo fisso di provvigione
IMPFISUN|8|1|0|Flag importo fisso unitario IMPFISUN|8|1|0|Flag importo fisso unitario
PRECPROV1|4|5|2|Percentuale di provvigione secondo agente PERCPROV1|4|5|2|Percentuale di provvigione secondo agente
CODIVA|1|4|0|Codice IVA CODIVA|1|4|0|Codice IVA
ADDIVA|8|1|0|Addebito IVA ADDIVA|8|1|0|Addebito IVA
ASPBENI|1|2|0|Aspetto dei beni ASPBENI|1|2|0|Aspetto dei beni

View File

@ -47,8 +47,8 @@ COMCF = S_DISABILITATO
DENCOM = S_DISABILITATO DENCOM = S_DISABILITATO
STATOCF = S_DISABILITATO STATOCF = S_DISABILITATO
DESSTATOCF = S_DISABILITATO DESSTATOCF = S_DISABILITATO
CONTR122 = S_NORMALE PACONTRATTO = S_NORMALE
MODPAG = S_NORMALE PATIPOCON = S_NORMALE
CONTSEP = S_NORMALE CONTSEP = S_NORMALE
CODVAL1 = S_NORMALE CODVAL1 = S_NORMALE
CODVAL2 = S_NORMALE CODVAL2 = S_NORMALE

View File

@ -48,8 +48,8 @@ COMCF = S_DISABILITATO
DENCOM = S_DISABILITATO DENCOM = S_DISABILITATO
STATOCF = S_DISABILITATO STATOCF = S_DISABILITATO
DESSTATOCF = S_DISABILITATO DESSTATOCF = S_DISABILITATO
CONTR122 = S_NORMALE PACONTRATTO = S_NORMALE
MODPAG = S_NORMALE PATIPOCON = S_NORMALE
CONTSEP = S_NORMALE CONTSEP = S_NORMALE
CODVAL1 = S_NORMALE CODVAL1 = S_NORMALE
CODVAL2 = S_NORMALE CODVAL2 = S_NORMALE

View File

@ -44,8 +44,8 @@ COMCF = S_DISABILITATO
DENCOM = S_DISABILITATO DENCOM = S_DISABILITATO
STATOCF = S_DISABILITATO STATOCF = S_DISABILITATO
DESSTATOCF = S_DISABILITATO DESSTATOCF = S_DISABILITATO
CONTR122 = S_NORMALE PATIPOCON = S_NORMALE
MODPAG = S_NORMALE PACONTRATTO = S_NORMALE
CONTSEP = S_NORMALE CONTSEP = S_NORMALE
CODVAL1 = S_NORMALE CODVAL1 = S_NORMALE
CODVAL2 = S_NORMALE CODVAL2 = S_NORMALE

View File

@ -55,8 +55,8 @@ COMCF = S_DISABILITATO
DENCOM = S_DISABILITATO DENCOM = S_DISABILITATO
STATOCF = S_DISABILITATO STATOCF = S_DISABILITATO
DESSTATOCF = S_DISABILITATO DESSTATOCF = S_DISABILITATO
CONTR122 = S_NORMALE PACONTRATTO = S_NORMALE
MODPAG = S_NORMALE PATIPOCON = S_NORMALE
CONTSEP = S_NORMALE CONTSEP = S_NORMALE
CODVAL1 = S_NORMALE CODVAL1 = S_NORMALE
CODVAL2 = S_NORMALE CODVAL2 = S_NORMALE

View File

@ -54,8 +54,8 @@ COMCF = S_DISABILITATO
DENCOM = S_DISABILITATO DENCOM = S_DISABILITATO
STATOCF = S_DISABILITATO STATOCF = S_DISABILITATO
DESSTATOCF = S_DISABILITATO DESSTATOCF = S_DISABILITATO
CONTR122 = S_NORMALE PACONTRATTO = S_NORMALE
MODPAG = S_NORMALE PATIPOCON = S_NORMALE
CONTSEP = S_NORMALE CONTSEP = S_NORMALE
CODVAL1 = S_NORMALE CODVAL1 = S_NORMALE
CODVAL2 = S_NORMALE CODVAL2 = S_NORMALE

View File

@ -1001,13 +1001,33 @@ void TMotore_application::ini2mask(TConfig& ini, TMask& msk, bool query)
const TMaskmode oldmode= (TMaskmode)msk.mode(); const TMaskmode oldmode= (TMaskmode)msk.mode();
msk.set_mode(MODE_MOD); msk.set_mode(MODE_MOD);
for (int i = 1; ini.set_paragraph(format("%d,%d", LF_RIGHEDOC, i)); i++)
TString_array pl; ini.list_paragraphs(pl);
if (pl.items() > 2)
{ {
if (i == 1) // Se trovo almeno una riga allora cancello tutto, poi aggiungo le righe bool should_reset = true;
FOR_EACH_ARRAY_ROW_BACK(pl, p, pa)
{
if (pa->starts_with("34,"))
{
if (pa->find('-') > 0)
should_reset = false; // Modalità append righe
}
else
pl.destroy(p);
}
// Se trovo almeno una riga allora cancello tutto, poi aggiungo le righe
if (should_reset && pl.items() > 0)
{ {
f.destroy(); f.destroy();
doc().destroy_rows(); doc().destroy_rows();
} }
}
FOR_EACH_ARRAY_ROW(pl, p, pa) if (pa->starts_with("34,"))
{
ini.set_paragraph(*pa);
// Considera solo i tipi riga validi // Considera solo i tipi riga validi
const TString4 tipo(ini.get(RDOC_TIPORIGA)); const TString4 tipo(ini.get(RDOC_TIPORIGA));
@ -1071,7 +1091,7 @@ void TMotore_application::ini2mask(TConfig& ini, TMask& msk, bool query)
const TRectype& art = cache().get(LF_ANAMAG, codart); const TRectype& art = cache().get(LF_ANAMAG, codart);
if (art.empty()) if (art.empty())
{ {
error_box(FR("Articolo non valido sulla riga %d: %s"), i, (const char*)codart); error_box(FR("Articolo non valido sulla riga %d: %s"), f.items(), (const char*)codart);
rec.zero(RDOC_CODARTMAG); rec.zero(RDOC_CODARTMAG);
} }
} }

View File

@ -254,41 +254,12 @@ TYPE=T_STRINGA
PROMPT="" PROMPT=""
SIZE=50 SIZE=50
[MODPAG]
MSKID=F_MODPAG
GROUP=100
SIZE=14
X=2
Y=8
PROMPT= "Contratto Spesometro: Modalità "
ITEMS=1|Non frazionato@2|Frazionato@3|Periodico
FIELDNAME=MODPAG
TYPE=T_LISTA
SPECIAL=MO FE
[CONTR122]
TYPE=T_STRINGA
GROUP=100
SIZE=18
X=51
Y=8
MSKID=F_CONTR122
PROMPT="Codice "
FLAG=U
FIELDNAME=CONTRATTO
USE=&FECON
INPUT=CODTAB[1,1] F_TIPOCF SE~CODTAB[2,7] F_CODCF SE~CODTAB[8,25] F_CONTR122
DISPLAY="Contratto" CODTAB[8,]~"Descrizione@50" S0
OUTPUT=F_CONTR122 CODTAB[8,]
HELP=Inserire un codice contratto di importo non inferiore a 3000 Euro
SPECIAL=ADD RUN fe0 -1 &CON
[CONTSEP] [CONTSEP]
TYPE=T_STRINGA TYPE=T_STRINGA
GROUP=100 GROUP=100
SIZE=6 SIZE=6
X=2 X=2
Y=9 Y=8
MSKID=F_CONTSEP MSKID=F_CONTSEP
PROMPT="Contabilità separata " PROMPT="Contabilità separata "
FLAG=U FLAG=U
@ -328,7 +299,7 @@ OUTPUT=@F_ORDDA
SIZE=50 SIZE=50
[CODVAL1] [CODVAL1]
//se codice=LIT il campo cambio e' di sola visualizzazione //se codice=EUR il campo cambio e' di sola visualizzazione
//se non abilitato archivio cambi //se non abilitato archivio cambi
GROUP=200 GROUP=200
X=2 X=2
@ -348,7 +319,7 @@ HELP=Inserire il codice della valuta
SPECIAL=ME CO,F_CODVAL1 SPECIAL=ME CO,F_CODVAL1
[CODVAL2] [CODVAL2]
//se codice=LIT il campo cambio e' di sola visualizzazione //se codice=EUR il campo cambio e' di sola visualizzazione
//se abilitato archivio cambi //se abilitato archivio cambi
GROUP=200 GROUP=200
X=2 X=2
@ -1961,6 +1932,37 @@ DISPLAY="Descrizione@50" S0~"Codice@10" CODTAB
COPY=OU F_CIG COPY=OU F_CIG
SIZE=50 40 SIZE=50 40
[PATIPOCON]
TYPE=T_LISTA
GROUP=3000
SIZE=111
X=2
Y=3
MSKID=F_PATIPOCON
PROMPT="Collegamento documento P.A. "
FIELDNAME=MODPAG
ITEMS=C|Contratto@V|Convenzione@O|Ordine
HELP=Inserire un tipo contratto/convenzione/ordine
SPECIAL=MO PA
[PACONTRATTO]
TYPE=T_STRINGA
GROUP=3000
SIZE=20
X=49
Y=3
MSKID=F_PACONTRATTO
PROMPT="Numero "
FLAG=U
FIELDNAME=CONTRATTO
USE=&PACON
INPUT=CODTAB[1,1] F_PATIPOCON SE~CODTAB[2,7] F_CODCF SE~CODTAB[8,27] F_PACONTRATTO
DISPLAY="Tipo" CODTAB[1,1]~"Codice" CODTAB[8,]~"Descrizione@50" S0
OUTPUT=F_PACONTRATTO CODTAB[8,]
HELP=Inserire un codice contratto/convenzione/ordine
SPECIAL=ADD RUN pa0 -1 &PACON
SPECIAL=MO PA
[CMSH] [CMSH]
GROUP=3000 GROUP=3000
X=2 X=2

View File

@ -1,5 +1,5 @@
[100] [100]
HEIGHT=7 HEIGHT=8
CONFIGS= CONFIGS=
[101] [101]
@ -105,7 +105,7 @@ HEIGHT=1
HEIGHT=2 HEIGHT=2
[3000] [3000]
HEIGHT=1 HEIGHT=3
[3200] [3200]
HEIGHT=1 HEIGHT=1

View File

@ -4,10 +4,14 @@
#include <relation.h> #include <relation.h>
#include <archives.h> #include <archives.h>
#include <utility.h> #include <utility.h>
#include "ve5400.h" #include "ve5400.h"
#include "velib.h" #include "velib.h"
#include <doc.h> #include <doc.h>
#include <agasys.h>
//----------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------
//-------MASCHERA----------------------------- //-------MASCHERA-----------------------------
class TArchive_mask : public TMask class TArchive_mask : public TMask
@ -243,9 +247,11 @@ bool TArchive_doc::restore_file(TIsamtempfile& src, bool update)
TLocalisamfile dst(src.num()); TLocalisamfile dst(src.num());
TString msg; msg << TR("Trasferimento") << ' ' << dst.description(); TString msg; msg << TR("Trasferimento") << ' ' << dst.description();
TProgind pi(src.items(), msg, true, true); TProgress_monitor pi(src.items(), msg);
for (int err = src.first(); err == NOERR; err = src.next()) for (int err = src.first(); err == NOERR; err = src.next())
{ {
if (!pi.add_status(1))
break;
err = src.curr().write(dst); err = src.curr().write(dst);
if (err == _isreinsert) if (err == _isreinsert)
{ {
@ -255,10 +261,10 @@ bool TArchive_doc::restore_file(TIsamtempfile& src, bool update)
err = NOERR; err = NOERR;
} }
if (err != NOERR) if (err != NOERR)
return error_box(FR("Errore %d"), err); return cantwrite_box(src.description());
} }
return !pi.iscancelled(); return true;
} }
bool TArchive_doc::restore_clifo(bool update) bool TArchive_doc::restore_clifo(bool update)
@ -290,26 +296,14 @@ void TArchive_doc::ripristina(const TMask& m)
_unit = m.get(F_DRIVE)[0]; _unit = m.get(F_DRIVE)[0];
_path = m.get(F_PATH); _path = m.get(F_PATH);
TFilename unit; TFilename src;
unit << _unit << ':' << SLASH; src << _unit << ':' << SLASH;
if (!xvt_fsys_is_removable_drive(src) && _path.full())
src.add(_path);
src.add("ve.z00");
if (!xvt_fsys_is_removable_drive(unit) && _path != "") //ripristina dalla directory scelta come origine dei dati const char* dst = & _tmp_dir[1];
{ if (::aga_unzip(src, dst))
TFilename path;
path << _unit << ':' << SLASH << _path;
for (int i = 0; i<= 1; i++)
{
TFilename orig = path;
TFilename dest = unit;
const char * name = i == 0 ? "backup.ini" : "ve.z00";
orig << SLASH << name;
dest << name;
fcopy(orig, dest);
}
}
const char* dir = & _tmp_dir[1];
if (_arc.restore(dir,_unit,FALSE,TRUE))
{ {
create_tmp_files(FALSE); // In realta' ci sono gia' create_tmp_files(FALSE); // In realta' ci sono gia'
@ -318,22 +312,9 @@ void TArchive_doc::ripristina(const TMask& m)
restore_docs(); restore_docs();
delete_tmp_files(true); // Removes temp files! delete_tmp_files(true); // Removes temp files!
//elimina i files copiati sulla root di un eventuale unita' fissa
if (!xvt_fsys_is_removable_drive(unit) && _path != "")
{
for (int i = 0; i<= 1; i++)
{
TFilename file_to_erease = unit;
const char * name = i == 0 ? "backup.ini" : "ve.z00";
file_to_erease << name;
xvt_fsys_removefile(file_to_erease);;
}
}
} }
else else
error_box("Errore nella ricezione dei file da dischetto. Nessun documento ricevuto."); error_box(TR("Errore nella ricezione dei file. Nessun documento ricevuto."));
} }

View File

@ -288,4 +288,3 @@ Picture = <ve01>
Module = 0 Module = 0
Flags = "" Flags = ""
Item_01 = "Caffè Hardy", <hamenu.men>, "", 10232 Item_01 = "Caffè Hardy", <hamenu.men>, "", 10232
Item_02 = "Gestione cooperative pesca", <comenu.men>

View File

@ -5,10 +5,6 @@
#include <varmask.h> #include <varmask.h>
#endif #endif
#ifndef __MULTIREC_H
#include <multirec.h>
#endif
#ifndef __RECSET_H #ifndef __RECSET_H
#include <recset.h> #include <recset.h>
#endif #endif
@ -25,7 +21,7 @@ class TViswin;
#include "../ve/verig.h" #include "../ve/verig.h"
#endif #endif
#ifndef __CGPAGAME_H #ifndef __CGLIB01_H
#include "../cg/cglib01.h" #include "../cg/cglib01.h"
#endif #endif
@ -278,7 +274,6 @@ public:
const int dbliv() const { return _liv; } const int dbliv() const { return _liv; }
const int dbrow() const { return _row; } const int dbrow() const { return _row; }
const TString & descrizione() const { return get("S0"); } const TString & descrizione() const { return get("S0"); }
const TString & riferimento(const TDocumento& doc, TString& rif) const; const TString & riferimento(const TDocumento& doc, TString& rif) const;
const TString & imponibile() const { return _imponibile;} const TString & imponibile() const { return _imponibile;}
@ -377,8 +372,10 @@ public:
const TString& tipodocdef() const { return get("S9"); } const TString& tipodocdef() const { return get("S9"); }
const int revision_len() const { return get_int("I0"); } const int revision_len() const { return get_int("I0"); }
const int tipo() const { return get_int("I1"); }
const TString& tipo_doc(int i) const; const TString& tipo_doc(int i) const;
int ntipi_doc() const; int ntipi_doc() const;
int find_tipo_doc(const char* cod) const;
void complete_num(long num, TString& codnum) const; void complete_num(long num, TString& codnum) const;
bool ok() const { return !empty(); } bool ok() const { return !empty(); }

View File

@ -43,6 +43,14 @@ int TCodice_numerazione::ntipi_doc() const
return l ? (((l - 1) / 4) + 1) : 0; return l ? (((l - 1) / 4) + 1) : 0;
} }
int TCodice_numerazione::find_tipo_doc(const char* cod) const
{
int i = ntipi_doc()-1;
while (i >= 0 && tipo_doc(i) != cod)
i--;
return i;
}
void TCodice_numerazione::complete_num(long num, TString& codnum) const void TCodice_numerazione::complete_num(long num, TString& codnum) const
{ {
codnum = prefisso(); codnum = prefisso();

View File

@ -730,9 +730,9 @@ real TRiga_documento::ritenuta(const char tipor, bool lordo, int ndec) const
if ((tipor != '\0' && tipo_rit == tipor) || (tipor == '\0' && tipo_rit != '\0')) if ((tipor != '\0' && tipo_rit == tipor) || (tipor == '\0' && tipo_rit != '\0'))
{ {
_rit_calc = TRUE; _rit_calc = true;
val = importo(true, lordo, ndec); val = importo(true, lordo, ndec);
_rit_calc = FALSE; _rit_calc = false;
} }
} }
return val; return val;
@ -770,7 +770,7 @@ real TRiga_documento::qtaresidua() const
{ {
if (!get_bool(RDOC_RIGAEVASA)) if (!get_bool(RDOC_RIGAEVASA))
{ {
real val = quantita() - qtaevasa(); const real val = quantita() - qtaevasa();
if (val > ZERO) if (val > ZERO)
return val; return val;
} }

View File

@ -261,12 +261,14 @@ protected:
virtual void add_rows(TRiga_documento & rout, TRiga_documento & rin) { rout += rin; } virtual void add_rows(TRiga_documento & rout, TRiga_documento & rin) { rout += rin; }
virtual void create_row(TDocumento& doc_out, const TRiga_documento & rin); virtual void create_row(TDocumento& doc_out, const TRiga_documento & rin);
virtual const TString & get_tipo_out(const TDocumento & doc_out) { return get("S8"); } virtual const TString& get_tipo_out(const TDocumento& doc_out) { return get("S8"); }
virtual bool da_raggruppare(const TRiga_documento & rin) { return true; } virtual bool da_raggruppare(const TRiga_documento & rin) { return true; }
virtual void elabora_riga(TRiga_documento& r, TDocumento& doc_out, bool usa_dcons, bool ragg_rig, bool ignora_desc, virtual void elabora_riga(TRiga_documento& r, TDocumento& doc_out, bool usa_dcons, bool ragg_rig, bool ignora_desc,
TToken_string & campi_riga, const TDate & dcons, const TDate & ddoc); TToken_string & campi_riga, const TDate & dcons, const TDate & ddoc);
void init(); void init();
bool get_num_tip_out(const TDocumento& doc_out, TString& codnum, TString& tipodoc);
public: public:
virtual bool raggruppa(TDocumento& din, TDocumento& dout); virtual bool raggruppa(TDocumento& din, TDocumento& dout);
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,

View File

@ -338,6 +338,39 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
return true; return true;
} }
bool TFatturazione_bolle::get_num_tip_out(const TDocumento& doc, TString& codnum, TString& tipodoc)
{
codnum = codice_numerazione_finale();
tipodoc = get_tipo_out(doc);
const TRectype& cfven = doc.clifor().vendite();
const TString& tipo_cfv = cfven.get(CFV_TIPODOCFAT);
if (tipo_cfv.full())
tipodoc = tipo_cfv;
const TCodice_numerazione& cn = cached_numerazione(codnum);
bool ok = cn.find_tipo_doc(tipo_cfv) >= 0;
if (!ok)
{
TISAM_recordset num_recset("USE %NUM SELECT I1=2");
for (ok = num_recset.move_first(); ok; ok = num_recset.move_next()) // giro sui vari tipi fattura
{
const TString4 codtab = num_recset.get("CODTAB").as_string();
const TCodice_numerazione cn(codtab);
if (cn.find_tipo_doc(tipodoc) >= 0)
{
codnum = codtab;
break;
}
}
if (!ok)
tipodoc = get_tipo_out(doc); // Rimette tipo orginale;
}
return ok;
}
bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo) const TDate& data_elab, bool interattivo)
{ {
@ -479,14 +512,13 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do
if (od >= tot) // Se non ho trovato un documento compatibile ... if (od >= tot) // Se non ho trovato un documento compatibile ...
{ // ... creane uno nuovo (certamente compatibile) { // ... creane uno nuovo (certamente compatibile)
const int anno = data_elab.year(); const int anno = data_elab.year();
const TString4 codnum(campione.get(DOC_CODNUM));
const TString4 tipo_out(get("S8")); // Tipo del documento di output
char provv = 'D'; char provv = 'D';
if (cached_numerazione(codice_numerazione_finale()).num_provv()) if (cached_numerazione(codice_numerazione_finale()).num_provv())
provv = 'P'; provv = 'P';
TDocumento* new_doc = new TDocumento(provv, anno, codnum, -1); // Per ora usa la stessa numerazione del documento d'ingresso per copiare tutto compatibilmente
const TString4 tmpcodnum = campione.get(DOC_CODNUM);
TDocumento* new_doc = new TDocumento(provv, anno, tmpcodnum, -1);
// Attenzione! Il cambio del tipo documento provocherebbe il reset delle variabili // Attenzione! Il cambio del tipo documento provocherebbe il reset delle variabili
// Per cui lo scrivo temporaneamente nel tipo del documento d'ingresso // Per cui lo scrivo temporaneamente nel tipo del documento d'ingresso
@ -527,30 +559,27 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do
post_process_input(doc_in); post_process_input(doc_in);
const int tot = doc_out.items(); const int tot = doc_out.items();
const TString4 codnum(codice_numerazione_finale());
real impminfat; real impminfat;
if (!interattivo && tot > 0) if (!interattivo && tot > 0)
{ {
impminfat = doc_out[0].clifor().vendite().get_real(CFV_IMPMINFAT); impminfat = doc_out[0].clifor().vendite().get_real(CFV_IMPMINFAT);
if (impminfat == ZERO) if (impminfat.is_zero())
impminfat = _impminfat; impminfat = _impminfat;
} }
for (int i = tot - 1; i >=0; i--) // Forza tipo e numerazione documento. for (int i = tot - 1; i >=0; i--) // Forza tipo e numerazione documento.
{ {
TDocumento& d = doc_out[i]; TDocumento& d = doc_out[i];
d.put(DOC_CODNUM, codnum);
TToken_string key; key.add(d.get(DOC_TIPOCF)); key.add(d.get(DOC_CODCF)); TString4 numout, tipout; get_num_tip_out(d, numout, tipout);
const TRectype & cfven = cache().get(LF_CFVEN, key); d.put(DOC_CODNUM, numout);
const TString4 tipo_cli(cfven.get(CFV_TIPODOCFAT)); TRecfield td(d.head(), DOC_TIPODOC); // Uso il TRecfield per scavalcare tutti gli automatismi
td = tipout;
const TString& tipo_out = get_tipo_out(d); // Tipo del documento di output
TRecfield td(d, DOC_TIPODOC); // Uso il TRecfield per scavalcare tutti gli automatismi
td = tipo_cli.empty() ? tipo_out : tipo_cli;
const TString& sconto = d.get(DOC_SCONTOPERC); const TString& sconto = d.get(DOC_SCONTOPERC);
d.put(DOC_SCONTOPERC, sconto); d.put(DOC_SCONTOPERC, sconto);
if (change_clifo()) if (change_clifo())
{ {
const TString4 tipodoc(d.tipo().codice()); const TString4 tipodoc(d.tipo().codice());

View File

@ -747,6 +747,15 @@ void TGenerazione_effetti::generate_bill(TDocumento& doc, bool interattivo) // b
} }
} }
} }
else
{
if (interattivo)
{
TString msg;
msg.format(FR("Ignorata nota di credito %d/%s/%ld"), doc.anno(), (const char*)doc.numerazione(), doc.numero());
xvtil_statbar_set(msg);
}
}
if (good() && _can_write) if (good() && _can_write)
change_doc_status(doc); change_doc_status(doc);
@ -764,7 +773,7 @@ bool TGenerazione_effetti::elabora(TLista_documenti& doc_in, TLista_documenti& d
for (int i = 0; i < items ; i++) // Scorriamo tutti i documenti nella lista for (int i = 0; i < items ; i++) // Scorriamo tutti i documenti nella lista
{ {
TDocumento& doc = doc_in[i]; TDocumento& doc = doc_in[i];
msg.format(FR("Generazione effetti documento %s/%ld."), (const char*) doc.numerazione(), doc.numero()); msg.format(FR("Generazione effetti documento %d/%s/%ld"), doc.anno(), (const char*)doc.numerazione(), doc.numero());
xvtil_statbar_set(msg); xvtil_statbar_set(msg);
do_events(); do_events();

View File

@ -76,7 +76,7 @@ public:
void set_riga_tic(); void set_riga_tic();
// Funzioni per settare i parametri // Funzioni per settare i parametri
void set_decimals(dec_parm & parm) { _parm = parm ; } void set_decimals(const dec_parm & parm) { _parm = parm ; }
// void set_condv(TCli_for * cli); // Cambia le condizioni di vendita // void set_condv(TCli_for * cli); // Cambia le condizioni di vendita
TDocumentoEsteso (const TRectype & rec, dec_parm & parm) ; TDocumentoEsteso (const TRectype & rec, dec_parm & parm) ;
TDocumentoEsteso (const TRectype & rec) ; TDocumentoEsteso (const TRectype & rec) ;

View File

@ -309,41 +309,47 @@ TDocumento_mask::TDocumento_mask(const char* td)
const TDongle& a = dongle(); const TDongle& a = dongle();
if (a.active(CTAUT) || a.active(PAAUT)) if (a.active(CTAUT) || a.active(PAAUT))
{ {
if (_ges_ca && id2pos(F_CUP) > 0) if (_ges_ca && id2pos(F_CUP) > 0) // Se gestisco l'analtica ...
{ {
TBrowse * bp = efield(F_CUP).browse(); TLocalisamfile cfcms(LF_CFCMS);
TRelation * rp = new TRelation(LF_CFCMS); if (cfcms.first() == NOERR) // ... ed i clienti per commessa (alias sono Dinamica)
{
// Allora impongo la scelta di CIG e CUP in base alla commessa
TBrowse* bp = efield(F_CUP).browse();
TRelation * rp = new TRelation(LF_CFCMS);
rp->add("%CUP", "CODTAB==" CFCMS_CUP); rp->add("%CUP", "CODTAB==" CFCMS_CUP);
rp->add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF"); rp->add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF");
bp->set_cursor(new TCursor(rp, "", 2)); bp->set_cursor(new TCursor(rp, "", 2));
bp->set_filter("TIPOCF==\"C\""); bp->set_filter("TIPOCF==\"C\"");
bp->remove_input_field(); bp->remove_input_field();
bp->add_input_field(TOSTRING(F_CMSH), CFCMS_COMMESSA, -1, true); bp->add_input_field(TOSTRING(F_CMSH), CFCMS_COMMESSA, -1, true);
bp->add_input_field(TOSTRING(F_CUP), CFCMS_CUP); bp->add_input_field(TOSTRING(F_CUP), CFCMS_CUP);
bp->remove_display_field(); bp->remove_display_field();
bp->add_display_field("Codice CUP@15", CFCMS_CUP); bp->add_display_field(HR("Codice CUP@15"), CFCMS_CUP);
bp->add_display_field("Descrizione@50", "%CUP->S0"); bp->add_display_field(HR("Descrizione@50"), "%CUP->S0");
bp->add_display_field("Codice Cliente", CFCMS_CODCF); bp->add_display_field(HR("Codice Cliente"), CFCMS_CODCF);
bp->add_display_field("Ragione Sociale@50", TOSTRING(LF_CLIFO) "->" CLI_RAGSOC); bp->add_display_field(HR("Ragione Sociale@50"), TOSTRING(LF_CLIFO) "->" CLI_RAGSOC);
bp->remove_output_field(); bp->remove_output_field();
bp->add_output_field(TOSTRING(F_CUP), CFCMS_CUP); bp->add_output_field(TOSTRING(F_CUP), CFCMS_CUP);
bp->add_output_field(TOSTRING(F_CIG), CFCMS_CIG); bp->add_output_field(TOSTRING(F_CIG), CFCMS_CIG);
bp->add_output_field(TOSTRING(F_DESCRCUP), "%CUP->S0"); bp->add_output_field(TOSTRING(F_DESCRCUP), "%CUP->S0");
bp->set_insert("Rca0 -5");
TBrowse * bpd = efield(F_DESCRCUP).browse(); TBrowse* bpd = efield(F_DESCRCUP).browse();
bpd->set_cursor(new TSorted_cursor(rp, CFCMS_COMMESSA "|%CUP->S0")); bpd->set_cursor(new TSorted_cursor(rp, CFCMS_COMMESSA "|%CUP->S0"));
bpd->set_filter("TIPOCF==\"C\""); bpd->set_filter("TIPOCF==\"C\"");
bpd->remove_input_field(); bpd->remove_input_field();
bpd->add_input_field(TOSTRING(F_CMSH), CFCMS_COMMESSA, -1, true); bpd->add_input_field(TOSTRING(F_CMSH), CFCMS_COMMESSA, -1, true);
bpd->add_input_field(TOSTRING(F_DESCRCUP), "%CUP->S0"); bpd->add_input_field(TOSTRING(F_DESCRCUP), "%CUP->S0");
bpd->remove_display_field(); bpd->remove_display_field();
bpd->add_display_field("Descrizione@50", "%CUP->S0"); bpd->add_display_field(HR("Descrizione@50"), "%CUP->S0");
bpd->add_display_field("Codice CUP@15", CFCMS_CUP); bpd->add_display_field(HR("Codice CUP@15"), CFCMS_CUP);
bpd->add_display_field("Codice Cliente", CFCMS_CODCF); bpd->add_display_field(HR("Codice Cliente"), CFCMS_CODCF);
bpd->add_display_field("Ragione Sociale@50", TOSTRING(LF_CLIFO) "->" CLI_RAGSOC); bpd->add_display_field(HR("Ragione Sociale@50"), TOSTRING(LF_CLIFO) "->" CLI_RAGSOC);
bpd->copy_output(bp); bpd->copy_output(bp);
bpd->set_insert("Rca0 -5");
TBrowse * bg = efield(F_CIG).browse(); TBrowse * bg = efield(F_CIG).browse();
TRelation * rg = new TRelation(LF_CFCMS); TRelation * rg = new TRelation(LF_CFCMS);
@ -356,14 +362,15 @@ TDocumento_mask::TDocumento_mask(const char* td)
bg->add_input_field(TOSTRING(F_CMSH), CFCMS_COMMESSA, -1, true); bg->add_input_field(TOSTRING(F_CMSH), CFCMS_COMMESSA, -1, true);
bg->add_input_field(TOSTRING(F_CIG), CFCMS_CIG); bg->add_input_field(TOSTRING(F_CIG), CFCMS_CIG);
bg->remove_display_field(); bg->remove_display_field();
bg->add_display_field("Codice CIG@15", CFCMS_CIG); bg->add_display_field(HR("Codice CIG@15"), CFCMS_CIG);
bg->add_display_field("Descrizione@50", "%CIG->S0"); bg->add_display_field(HR("Descrizione@50"), "%CIG->S0");
bg->add_display_field("Codice Cliente", CFCMS_CODCF); bg->add_display_field(HR("Codice Cliente"), CFCMS_CODCF);
bg->add_display_field("Ragione Sociale@50", TOSTRING(LF_CLIFO) "->" CLI_RAGSOC); bg->add_display_field(HR("Ragione Sociale@50"), TOSTRING(LF_CLIFO) "->" CLI_RAGSOC);
bg->remove_output_field(); bg->remove_output_field();
bg->add_output_field(TOSTRING(F_CIG), CFCMS_CIG); bg->add_output_field(TOSTRING(F_CIG), CFCMS_CIG);
bg->add_output_field(TOSTRING(F_CUP), CFCMS_CUP); bg->add_output_field(TOSTRING(F_CUP), CFCMS_CUP);
bg->add_output_field(TOSTRING(F_DESCRCIG), "%CIG->S0"); bg->add_output_field(TOSTRING(F_DESCRCIG), "%CIG->S0");
bg->set_insert("Rca0 -5");
TBrowse * bgd = efield(F_DESCRCIG).browse(); TBrowse * bgd = efield(F_DESCRCIG).browse();
@ -378,6 +385,8 @@ TDocumento_mask::TDocumento_mask(const char* td)
bgd->add_display_field(HR("Cliente"), CFCMS_CODCF); bgd->add_display_field(HR("Cliente"), CFCMS_CODCF);
bgd->add_display_field(HR("Ragione Sociale@50"), TOSTRING(LF_CLIFO) "->" CLI_RAGSOC); bgd->add_display_field(HR("Ragione Sociale@50"), TOSTRING(LF_CLIFO) "->" CLI_RAGSOC);
bgd->copy_output(bg); bgd->copy_output(bg);
bgd->set_insert("Rca0 -5");
}
} }
} }
else else
@ -391,6 +400,7 @@ TDocumento_mask::TDocumento_mask(const char* td)
const bool gesoff = cfg.get_bool("GES", "ve", 3); const bool gesoff = cfg.get_bool("GES", "ve", 3);
enable(F_CODCAMP, gesoff); enable(F_CODCAMP, gesoff);
enable(F_DESCAMP, gesoff); enable(F_DESCAMP, gesoff);
const bool gessco = cfg.get_char("GESSCO") != 'N'; const bool gessco = cfg.get_char("GESSCO") != 'N';
enable(F_SCONTOPERC, gessco); enable(F_SCONTOPERC, gessco);
@ -542,7 +552,7 @@ void TDocumento_mask::insert_anal_page()
int newpage = win2page(_sheet->parent()); int newpage = win2page(_sheet->parent());
if (newpage == 0) if (newpage == 0)
newpage++; newpage++;
create_page("Analitica", newpage); // Inserisce una pagina vuota con un titolo a caso create_page(TR("Analitica"), newpage); // Inserisce una pagina vuota con un titolo a caso
add_groupbox(DLG_NULL, newpage, "", 1, 0, 78, 6); add_groupbox(DLG_NULL, newpage, "", 1, 0, 78, 6);
add_string(DLG_NULL, newpage, TR("Cod. num. "), 2, 1, 4, "D").set_group(2); add_string(DLG_NULL, newpage, TR("Cod. num. "), 2, 1, 4, "D").set_group(2);
@ -567,6 +577,7 @@ void TDocumento_mask::insert_anal_page()
short dlg = F_CDC1; // id del primo campo da generare short dlg = F_CDC1; // id del primo campo da generare
short dlgd = F_DESCDC1; short dlgd = F_DESCDC1;
const bool ca_in_testa = doc().tipo().head_ca_required();
for (int i = 0; i < 2; i++) for (int i = 0; i < 2; i++)
{ {
const TString& level = ini.get("Level", NULL, i+1); // Legge il livello 1 o 2 const TString& level = ini.get("Level", NULL, i+1); // Legge il livello 1 o 2
@ -575,11 +586,11 @@ void TDocumento_mask::insert_anal_page()
_cdc_start = dlg; _cdc_start = dlg;
_cdc_end = dlg + ca_multilevel_code_info(LF_CDC).levels()-1; _cdc_end = dlg + ca_multilevel_code_info(LF_CDC).levels()-1;
if (use_fsc && fasinfo.parent() == LF_CDC) if (use_fsc && fasinfo.parent() == LF_CDC)
insert_anal_fields(*this, newpage, LF_FASI, y, dlg, dlgd, fsc_req && doc().tipo().head_ca_required()); insert_anal_fields(*this, newpage, LF_FASI, y, dlg, dlgd, fsc_req && ca_in_testa);
else else
{ {
const bool cdc_req = ini.get_bool("CdcRequired"); const bool cdc_req = ca_in_testa && ini.get_bool("CdcRequired");
insert_anal_fields(*this, newpage, LF_CDC, y, dlg, dlgd, cdc_req && doc().tipo().head_ca_required()); insert_anal_fields(*this, newpage, LF_CDC, y, dlg, dlgd, cdc_req);
} }
} else } else
if (level == "CMS") // Crea commessa if (level == "CMS") // Crea commessa
@ -587,17 +598,15 @@ void TDocumento_mask::insert_anal_page()
_cms_start = dlg; _cms_start = dlg;
_cms_end = dlg + ca_multilevel_code_info(LF_COMMESSE).levels()-1; _cms_end = dlg + ca_multilevel_code_info(LF_COMMESSE).levels()-1;
if (use_fsc && fasinfo.parent() == LF_COMMESSE) if (use_fsc && fasinfo.parent() == LF_COMMESSE)
insert_anal_fields(*this, newpage, LF_FASI, y, dlg, dlgd, fsc_req && doc().tipo().head_ca_required()); insert_anal_fields(*this, newpage, LF_FASI, y, dlg, dlgd, fsc_req && ca_in_testa);
else else
{ {
const bool cms_req = ini.get_bool("CmsRequired"); const bool cms_req = false; // ca_in_testa && ini.get_bool("CmsRequired"); // Ora gestisco il REQUIRED da codcms_handler
insert_anal_fields(*this, newpage, LF_COMMESSE, y, dlg, dlgd, cms_req);
insert_anal_fields(*this, newpage, LF_COMMESSE, y, dlg, dlgd, cms_req && doc().tipo().head_ca_required());
} }
}
}
if (_cms_start > 0)
set_field_handler(_cms_end, codcms_handler); set_field_handler(_cms_end, codcms_handler);
}
}
if (use_fsc && fasinfo.parent() <= 0) if (use_fsc && fasinfo.parent() <= 0)
insert_anal_fields(*this, newpage, LF_FASI, y, dlg, dlgd, fsc_req && doc().tipo().head_ca_required()); insert_anal_fields(*this, newpage, LF_FASI, y, dlg, dlgd, fsc_req && doc().tipo().head_ca_required());
@ -741,7 +750,7 @@ void TDocumento_mask::configura_sheet(TSheet_field& sheet)
for ( i = MAX_COLUMNS - 1; i >= 0; i-- ) for ( i = MAX_COLUMNS - 1; i >= 0; i-- )
{ {
if( to_delete[i] ) if (to_delete[i])
{ {
sheet.enable_column( i + FIRST_FIELD, false); sheet.enable_column( i + FIRST_FIELD, false);
sheet.delete_column( i + FIRST_FIELD); sheet.delete_column( i + FIRST_FIELD);
@ -1848,18 +1857,22 @@ void TDocumento_mask::update_giacenza()
bool TDocumento_mask::ss_handler(TMask_field& f, KEY key) bool TDocumento_mask::ss_handler(TMask_field& f, KEY key)
{ {
bool ok = true; bool ok = true;
if (key == K_ENTER ) if (key == K_ENTER)
{ {
const TSheet_field& ss = (TSheet_field&)f; const TSheet_field& ss = (TSheet_field&)f;
TDocumento_mask& mask = (TDocumento_mask&)ss.mask(); TDocumento_mask& mask = (TDocumento_mask&)ss.mask();
TConfig& ini = ca_config();
const short cme = mask.cms_end(); const short cme = mask.cms_end();
if (mask.id2pos(cme) > 0 && mask.get(cme).empty() && (ini.get_int("Authorizations") & 0x6)) // Se la commessa in testata è vuota controllo che sia presente sulle righe
if (!ss.empty() && cme > 0 && mask.efield(cme).empty())
{ {
if (ini.get_bool("CmsRequired") || ini.get("FathFasi").full()) // Controllo se la commessa è veramente obbligatoria in base alla configurazione
TConfig& ini = ca_config();
if ((ini.get_int("Authorizations") & 0x6) && (ini.get_bool("CmsRequired") || ini.get("FathFasi").full()))
{ {
const int col = ss.cid2index(mask.cms_end_sh()); const short cmes = mask.cms_end_sh();
if (cmes > 0) // Puo' succedere che sia < 0 in assenza di righe buone
{
const int col = ss.cid2index(cmes);
FOR_EACH_SHEET_ROW(ss, r, riga) FOR_EACH_SHEET_ROW(ss, r, riga)
{ {
if (ss.cell_enabled(r, col)) if (ss.cell_enabled(r, col))
@ -1878,6 +1891,7 @@ bool TDocumento_mask::ss_handler(TMask_field& f, KEY key)
if (ok && ss.empty() && mask.insert_mode() && !app().is_transaction()) if (ok && ss.empty() && mask.insert_mode() && !app().is_transaction())
ok = yesno_box(TR("Il documento è privo di righe:\nSi desidera continuare ugualmente?")); ok = yesno_box(TR("Il documento è privo di righe:\nSi desidera continuare ugualmente?"));
*/ */
}
} }
return ok; return ok;
} }

View File

@ -2806,38 +2806,40 @@ bool codcms_handler(TMask_field& f, KEY key)
return true; return true;
TDocumento_mask& mask = (TDocumento_mask&)f.mask(); TDocumento_mask& mask = (TDocumento_mask&)f.mask();
if (f.dlg() < mask.cms_end())
if (f.empty() || f.dlg() < mask.cms_end())
return true; // Opera solo sull'ultimo livello del codice commessa return true; // Opera solo sull'ultimo livello del codice commessa
const TRectype& curr = mask.efield(mask.cms_end()).browse()->cursor()->curr(); TDocumento& doc = mask.doc();
const TString80 codcms = curr.get(COMMESSE_CODCMS); TSheet_field& sf = mask.sfield(F_SHEET);
const bool req = !sf.empty() && doc.tipo().head_ca_required();
if (f.to_check(key, true)) f.check_type(req ? CHECK_REQUIRED : CHECK_NORMAL);
if (f.empty())
{ {
mask.set(F_CMSH, codcms); if (req)
if (curr.get_bool(COMMESSE_CHIUSA)) return f.error_box(TR("La commessa è obbligatoria per questo tipo documento"));
return f.error_box(FR("Impossibile operare sulla commessa chiusa %s"), (const char*)codcms); else
return true;
} }
const TRectype& curr_cms = ((TEdit_field&)f).browse()->cursor()->curr();
const TString80 codcms = curr_cms.get(COMMESSE_CODCMS);
mask.set(F_CMSH, codcms);
if (curr_cms.get_bool(COMMESSE_CHIUSA))
return f.error_box(FR("Impossibile operare sulla commessa chiusa %s"), (const char*)codcms);
if ((key == K_TAB && f.focusdirty()) || key == K_ENTER) if ((key == K_TAB && f.focusdirty()) || key == K_ENTER)
{ {
// Controlla se c'e' la gestione dei centri di costo al secondo livello // Controlla se c'e' la gestione dei centri di costo al secondo livello
if (mask.codcms() != codcms) if (mask.codcms() != codcms)
{ {
TDocumento & doc = mask.doc();
TSheet_field & sf = mask.sfield(F_SHEET);
const int rows = doc.physical_rows();
doc.put(DOC_CODCMS, codcms); doc.put(DOC_CODCMS, codcms);
for (int r = 1; r <= rows; r++) FOR_EACH_PHYSICAL_RDOC(doc, r, riga)
{ {
TRiga_documento & riga = doc[r]; const TMask& m = sf.sheet_row_mask(r -1);
const TMask & m = sf.sheet_row_mask(r -1);
if (m.id2pos(FR_TIPODET) >= 0 && m.field(FR_TIPODET).active()) //solo se attivo il campo di indetraibilita'... if (m.id2pos(FR_TIPODET) >= 0 && m.field(FR_TIPODET).active()) //solo se attivo il campo di indetraibilita'...
{ {
riga.cms2tipodet(); riga->cms2tipodet();
riga.autoload(sf); riga->autoload(sf);
sf.force_update(r - 1); sf.force_update(r - 1);
} }
} }
@ -2846,7 +2848,7 @@ bool codcms_handler(TMask_field& f, KEY key)
if (mask.cdc_start() > 0 && mask.cdc_start() > mask.cms_start() && mask.codcms() != codcms) if (mask.cdc_start() > 0 && mask.cdc_start() > mask.cms_start() && mask.codcms() != codcms)
{ {
mask.codcms() = codcms; mask.codcms() = codcms;
const TString codcosto = curr.get(COMMESSE_CODCOSTO); const TString codcosto = curr_cms.get(COMMESSE_CODCOSTO);
if (codcosto.full()) // Propone centro di costo solo se specificato if (codcosto.full()) // Propone centro di costo solo se specificato
{ {
for (short i = mask.cdc_start(); i <= mask.cdc_end(); i++) for (short i = mask.cdc_start(); i <= mask.cdc_end(); i++)
@ -2861,16 +2863,12 @@ bool codcms_handler(TMask_field& f, KEY key)
} }
} }
} }
if ((key == K_TAB && f.focusdirty())) if ((key == K_TAB && f.focusdirty()) && !doc.bloccato())
{
TDocumento & doc = mask.doc();
if (!doc.bloccato())
{ {
char name[8] = "CODSP0"; char name[8] = "CODSP0";
TString_array spese; TString_array spese;
const TRectype & ven_rec = doc.clifor().vendite(); const TRectype& ven_rec = doc.clifor().vendite();
for (int i = 1; i <= 4; i++) for (int i = 1; i <= 4; i++)
{ {
name[5] = '0' + i; name[5] = '0' + i;
@ -2879,11 +2877,10 @@ bool codcms_handler(TMask_field& f, KEY key)
spese.add(s); spese.add(s);
} }
mask.mask2doc(); mask.mask2doc();
doc.put(DOC_SPESEUPD, ""); doc.zero(DOC_SPESEUPD);
doc.update_spese_aut(spese, false, &mask.sfield(F_SHEET)); doc.update_spese_aut(spese, false, &mask.sfield(F_SHEET));
} }
} }
}
if (main_app().has_module(CTAUT) && (key == K_TAB && f.focusdirty())) if (main_app().has_module(CTAUT) && (key == K_TAB && f.focusdirty()))
{ {
@ -2895,8 +2892,7 @@ bool codcms_handler(TMask_field& f, KEY key)
key.add(codcms); key.add(codcms);
key.add("C"); key.add("C");
key.add(1); key.add(1);
const TRectype & cfcms = cache().get(LF_CFCMS, key); const TRectype& cfcms = cache().get(LF_CFCMS, key);
mask.set(F_CUP, cfcms.get(CFCMS_CUP), 3); mask.set(F_CUP, cfcms.get(CFCMS_CUP), 3);
mask.set(F_CIG, cfcms.get(CFCMS_CIG), 3); mask.set(F_CIG, cfcms.get(CFCMS_CIG), 3);
} }
@ -2954,11 +2950,12 @@ bool codcms_handler(TMask_field& f, KEY key)
const TString& contsep = cache().get(LF_COMMESSE, codcms, COMMESSE_CONTSEP); const TString& contsep = cache().get(LF_COMMESSE, codcms, COMMESSE_CONTSEP);
mask.set(F_CONTSEP, contsep); mask.set(F_CONTSEP, contsep);
} }
} }
else else
{
if (key == K_TAB && !mask.is_running()) if (key == K_TAB && !mask.is_running())
mask.codcms() = mask.doc().get(DOC_CODCMS); mask.codcms() = mask.doc().get(DOC_CODCMS);
}
return true; return true;
} }
@ -2991,8 +2988,8 @@ bool evasion_check_handler(TMask_field& f, KEY key )
key.add(orig_doc->get(DOC_CODNUM)); key.add(orig_doc->get(DOC_CODNUM));
key.add(orig_doc->get(DOC_NDOC)); key.add(orig_doc->get(DOC_NDOC));
TDocumento & father_doc = cached_doc(key); TDocumento& father_doc = cached_doc(key);
const TRectype * row = r.find_original_rdoc(); const TRectype* row = r.find_original_rdoc();
if (row != NULL) if (row != NULL)
{ {
@ -3037,7 +3034,9 @@ bool evasion_check_handler(TMask_field& f, KEY key )
const real residuo = ordinato - evaso; const real residuo = ordinato - evaso;
if (residuo < qta) if (residuo < qta)
if (!yesno_box(FR("La quantita' %s e' superiore al residuo %s,\nvuoi continuare ugualmente"), qta.stringa(), residuo.stringa())) {
if (!yesno_box(FR("La quantità %s è superiore al residuo %s:\nsi desidera continuare ugualmente?"),
qta.stringa(), residuo.stringa()))
{ {
if (!f.mask().is_running()) if (!f.mask().is_running())
{ {
@ -3051,6 +3050,7 @@ bool evasion_check_handler(TMask_field& f, KEY key )
m.set_focus_field(F_SHEET); m.set_focus_field(F_SHEET);
} }
} }
}
} }
if (f.dlg() == FR_QTA) if (f.dlg() == FR_QTA)
@ -3074,7 +3074,6 @@ bool distinta_link_handler(TMask_field& f, KEY key )
tempfile.temp("ve0"); tempfile.temp("ve0");
tempfile.ext("ini"); tempfile.ext("ini");
{ {
TConfig configfile(tempfile); TConfig configfile(tempfile);
TString8 para; TString8 para;

View File

@ -8,7 +8,8 @@ Item_02 = "Stampe documenti", [VEMENU_053]
Item_03 = "Elaborazioni differite", [VEMENU_050] Item_03 = "Elaborazioni differite", [VEMENU_050]
Item_04 = "Servizi", [VEMENU_051] Item_04 = "Servizi", [VEMENU_051]
Item_05 = "Configurazione modulo", [VEMENU_052] Item_05 = "Configurazione modulo", [VEMENU_052]
Item_06 = "Moduli aggiuntivi", <veaddon.men> Item_06 = "Fatture P.A.", <pamenu.men>
Item_07 = "Moduli aggiuntivi", <veaddon.men>
[VEMENU_050] [VEMENU_050]
Caption = "Gestione elaborazioni differite" Caption = "Gestione elaborazioni differite"

View File

@ -118,9 +118,9 @@
#define F_CODABIP1 222 #define F_CODABIP1 222
#define F_CODCABP1 223 #define F_CODCABP1 223
#define F_PROGBNP1 224 #define F_PROGBNP1 224
#define F_CONTR122 225 #define F_PACONTRATTO 225
#define F_CONTSEP 226 #define F_CONTSEP 226
#define F_MODPAG 227 #define F_PATIPOCON 227
#define F_IVAXCASSA 228 #define F_IVAXCASSA 228
#define F_CDC1 251 #define F_CDC1 251