Patch level : 12.0 646
Files correlati : ba,cg,fp Commento : - Modificata tabella tabcom, aggiunto campo S13 per vettori - Rifatta gestione vettori per fatture accompagnatorie - Corretti errore pec in esportazione fp - Aggiunta valorizzazione blocco fattura accompagnatoria - Rifatta gestione filtri fattura elettronica con codice numerazione in riga dello sheet - Aggiunte macro per non inviare più documenti a clienti - Aggiunto controllo sullo stato del documento, se non è almeno stampato viene saltato - Aggiunto salto righe con descrizione vuota - Cambiato controllo che l'articolo sia corretto, la funzione ok() non verifica sta cosa - Cambiata valorizzazione codiva per righe descrizione e plafond, così da evitare l'errore in DatiRiepilogoIVA - Aggiunto controllo sul pagamento, adesso non escono più i warning indesiderati
This commit is contained in:
		
							parent
							
								
									30e9c1876a
								
							
						
					
					
						commit
						baef2bfba4
					
				@ -1,3 +1,3 @@
 | 
				
			|||||||
4
 | 
					4
 | 
				
			||||||
1
 | 
					1
 | 
				
			||||||
%tabcom|0|0|1210|0|Tabelle comuni|1500||
 | 
					%tabcom|0|0|1280|0|Tabelle comuni|1500||
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
4
 | 
					4
 | 
				
			||||||
89
 | 
					90
 | 
				
			||||||
COD|1|3|0|
 | 
					COD|1|3|0|
 | 
				
			||||||
CODTAB|1|25|0|
 | 
					CODTAB|1|25|0|
 | 
				
			||||||
S0|1|70|0|
 | 
					S0|1|70|0|
 | 
				
			||||||
@ -15,6 +15,7 @@ S9|1|5|0|
 | 
				
			|||||||
S10|1|5|0|
 | 
					S10|1|5|0|
 | 
				
			||||||
S11|1|5|0|
 | 
					S11|1|5|0|
 | 
				
			||||||
S12|1|5|0|
 | 
					S12|1|5|0|
 | 
				
			||||||
 | 
					S13|1|70|0|
 | 
				
			||||||
I0|3|7|0|
 | 
					I0|3|7|0|
 | 
				
			||||||
I1|3|7|0|
 | 
					I1|3|7|0|
 | 
				
			||||||
I2|3|7|0|
 | 
					I2|3|7|0|
 | 
				
			||||||
 | 
				
			|||||||
@ -1667,7 +1667,7 @@ END
 | 
				
			|||||||
STRING F_PADESTIN 7
 | 
					STRING F_PADESTIN 7
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 2 19 "Destinatario "
 | 
					  PROMPT 2 19 "Destinatario "
 | 
				
			||||||
  FLAGS "U"
 | 
					  FLAGS ""
 | 
				
			||||||
  MODULES PA,FP
 | 
					  MODULES PA,FP
 | 
				
			||||||
  HELP "Codice ufficio dell destinatario della fattura elettronica"
 | 
					  HELP "Codice ufficio dell destinatario della fattura elettronica"
 | 
				
			||||||
  FIELD LF_CFVEN->PADESTIN
 | 
					  FIELD LF_CFVEN->PADESTIN
 | 
				
			||||||
 | 
				
			|||||||
@ -8,6 +8,7 @@
 | 
				
			|||||||
#include "cgtbbnp.h"
 | 
					#include "cgtbbnp.h"
 | 
				
			||||||
#include "cgtbesc.h"
 | 
					#include "cgtbesc.h"
 | 
				
			||||||
#include "cgtbnot.h"
 | 
					#include "cgtbnot.h"
 | 
				
			||||||
 | 
					#include "cgtbvet.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "cglib01.h"
 | 
					#include "cglib01.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -148,6 +149,13 @@ int CGTTable_application::read(TMask& m)
 | 
				
			|||||||
  if (table_name == TAB_NOTECLI)
 | 
					  if (table_name == TAB_NOTECLI)
 | 
				
			||||||
    glue_string();
 | 
					    glue_string();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						else if (table_name == "%VET" && err == NOERR)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							// Prendo il vecchio campo della P.IVA e lo sbatto in quello nuovo
 | 
				
			||||||
 | 
							if(m.get(F_PAIV).empty())
 | 
				
			||||||
 | 
								m.set(F_PAIV, get_relation()->curr().get("S3").mid(20, 12));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return err;
 | 
					  return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define F_CODVETT                            101
 | 
					#define F_CODVETT                            101
 | 
				
			||||||
#define F_RAGSO                              102
 | 
					#define F_RAGSO                              102
 | 
				
			||||||
 | 
					#define F_RAGSOA														 121
 | 
				
			||||||
#define F_IND                                103
 | 
					#define F_IND                                103
 | 
				
			||||||
#define F_TEL                                104
 | 
					#define F_TEL                                104
 | 
				
			||||||
#define F_PTEL                               105
 | 
					#define F_PTEL                               105
 | 
				
			||||||
@ -16,11 +17,12 @@
 | 
				
			|||||||
#define F_DENCOM                             114
 | 
					#define F_DENCOM                             114
 | 
				
			||||||
#define F_NUM                                115
 | 
					#define F_NUM                                115
 | 
				
			||||||
#define F_PFAX                               116
 | 
					#define F_PFAX                               116
 | 
				
			||||||
#define F_PTELEX                             117
 | 
					#define F_EORI	                             117
 | 
				
			||||||
#define F_STATOPAIV                          118
 | 
					#define F_STATOPAIV                          118
 | 
				
			||||||
#define F_PAIV                               119
 | 
					#define F_PAIV                               119
 | 
				
			||||||
#define F_ALBO                               120
 | 
					#define F_ALBO                               120
 | 
				
			||||||
 | 
					#define F_COFI															 122
 | 
				
			||||||
 | 
					#define F_ISFISICA													 123
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -28,37 +28,70 @@ OUTPUT F_RAGSO S0
 | 
				
			|||||||
KEY 1
 | 
					KEY 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
STRING F_RAGSO 50
 | 
					BOOLEAN F_ISFISICA
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
PROMPT 2 4 "Ragione sociale "
 | 
					PROMPT 40 2 "Persona Fisica"
 | 
				
			||||||
 | 
					FIELD B0
 | 
				
			||||||
 | 
					HELPT "Indica se è una persona fisica"
 | 
				
			||||||
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRING F_RAGSO 30
 | 
				
			||||||
 | 
					BEGIN
 | 
				
			||||||
 | 
					PROMPT 2 3 "Cognome/Ragione sociale     "
 | 
				
			||||||
HELP "Ragione sociale del vettore"
 | 
					HELP "Ragione sociale del vettore"
 | 
				
			||||||
FIELD S0
 | 
					FIELD S0[1,30]
 | 
				
			||||||
USE %VET KEY 2
 | 
					USE %VET KEY 2
 | 
				
			||||||
CHECKTYPE REQUIRED
 | 
					CHECKTYPE REQUIRED
 | 
				
			||||||
INPUT S0 F_RAGSO
 | 
					INPUT S0 F_RAGSO
 | 
				
			||||||
DISPLAY "Codice vettore" CODTAB
 | 
					DISPLAY "Codice vettore" CODTAB
 | 
				
			||||||
DISPLAY "Ragione sociale@50" S0
 | 
					DISPLAY "Ragione sociale@50" S0
 | 
				
			||||||
OUTPUT F_CODVETT CODTAB
 | 
					OUTPUT F_CODVETT CODTAB
 | 
				
			||||||
OUTPUT F_RAGSO S0
 | 
					OUTPUT F_RAGSO S0[1,30]
 | 
				
			||||||
 | 
					OUTPUT F_RAGSO S0[31,50]
 | 
				
			||||||
KEY 2
 | 
					KEY 2
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRING F_RAGSOA 20
 | 
				
			||||||
 | 
					BEGIN
 | 
				
			||||||
 | 
					  PROMPT 2 4 "Nome/Seconda parte Rag. Soc."
 | 
				
			||||||
 | 
					  FIELD S0[31,50]
 | 
				
			||||||
 | 
					  USE %VET KEY 2
 | 
				
			||||||
 | 
					  HELP "Seconda parte della ragione sociale o nome"
 | 
				
			||||||
 | 
					  MESSAGE COPY,6@
 | 
				
			||||||
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
STRING F_STATOPAIV 2
 | 
					STRING F_STATOPAIV 2
 | 
				
			||||||
BEGIN
 | 
					 | 
				
			||||||
  PROMPT 50 50 "Partita IVA "
 | 
					 | 
				
			||||||
  FLAGS "H"
 | 
					 | 
				
			||||||
END
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
STRING F_PAIV 12
 | 
					 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 2 6 "Partita IVA "
 | 
					  PROMPT 2 6 "Partita IVA "
 | 
				
			||||||
  FIELD S3[21,32]
 | 
					  FIELD S3[49,51]
 | 
				
			||||||
  HELP "Partita IVA del cliente/fornitore"
 | 
					  HELP "Codice ISO dello stato"
 | 
				
			||||||
  VALIDATE PI_FUNC  F_STATOPAIV
 | 
					  FLAGS "U"
 | 
				
			||||||
  CHECKTYPE NORMAL
 | 
					  USE %SCE
 | 
				
			||||||
 | 
					  INPUT CODTAB F_STATOPAIV
 | 
				
			||||||
 | 
					  DISPLAY "Codice" CODTAB
 | 
				
			||||||
 | 
					  DISPLAY "Descrizione@50" S0
 | 
				
			||||||
 | 
					  OUTPUT F_STATOPAIV CODTAB
 | 
				
			||||||
 | 
					  CHECKTYPE REQUIRED
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GROUPBOX DLG_NULL 75 7
 | 
					STRING F_PAIV 28 16
 | 
				
			||||||
 | 
					BEGIN
 | 
				
			||||||
 | 
					  PROMPT 20 6 ""
 | 
				
			||||||
 | 
					  FIELD S13[1,28]
 | 
				
			||||||
 | 
					  HELP "Partita IVA del vettore"
 | 
				
			||||||
 | 
					  VALIDATE PI_FUNC  F_STATOPAIV
 | 
				
			||||||
 | 
					  CHECKTYPE REQUIRED
 | 
				
			||||||
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRING F_COFI 16
 | 
				
			||||||
 | 
					BEGIN
 | 
				
			||||||
 | 
					  PROMPT 38 6 "Ident. fiscale"
 | 
				
			||||||
 | 
					  FIELD S13[29,45]
 | 
				
			||||||
 | 
					  HELP "Codice fiscale del vettore"
 | 
				
			||||||
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GROUPBOX DLG_NULL 75 8
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
 PROMPT 1 7 "Recapito"
 | 
					 PROMPT 1 7 "Recapito"
 | 
				
			||||||
 FLAGS "R"
 | 
					 FLAGS "R"
 | 
				
			||||||
@ -165,15 +198,22 @@ BEGIN
 | 
				
			|||||||
 FIELD S3[33,48]
 | 
					 FIELD S3[33,48]
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GROUPBOX DLG_NULL 75 5
 | 
					STRING F_EORI 17
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
 PROMPT 1 14 "Numeri telefonici"
 | 
					 PROMPT 2 13 "Codice EORI       "
 | 
				
			||||||
 | 
					 FIELD S2[1,17]
 | 
				
			||||||
 | 
					 CHECKTYPE REQUIRED
 | 
				
			||||||
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GROUPBOX DLG_NULL 75 4
 | 
				
			||||||
 | 
					BEGIN
 | 
				
			||||||
 | 
					 PROMPT 1 15 "Numeri telefonici"
 | 
				
			||||||
 FLAGS "R"
 | 
					 FLAGS "R"
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
STRING F_PTEL 10
 | 
					STRING F_PTEL 10
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
PROMPT 2 15 "Telefono  "
 | 
					PROMPT 2 16 "Telefono  "
 | 
				
			||||||
HELP "Prefisso telefonico del vettore"
 | 
					HELP "Prefisso telefonico del vettore"
 | 
				
			||||||
FIELD S5[1,10]
 | 
					FIELD S5[1,10]
 | 
				
			||||||
FLAGS "U"
 | 
					FLAGS "U"
 | 
				
			||||||
@ -181,7 +221,7 @@ END
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
STRING F_TEL 20
 | 
					STRING F_TEL 20
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
PROMPT 30 15 ""
 | 
					PROMPT 30 16 ""
 | 
				
			||||||
HELP "Numero telefonico del vettore"
 | 
					HELP "Numero telefonico del vettore"
 | 
				
			||||||
FIELD S3[1,20]
 | 
					FIELD S3[1,20]
 | 
				
			||||||
FLAGS "U"
 | 
					FLAGS "U"
 | 
				
			||||||
@ -189,7 +229,7 @@ END
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
STRING F_PFAX 10
 | 
					STRING F_PFAX 10
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
PROMPT 2 16 "Fax       "
 | 
					PROMPT 2 17 "Fax       "
 | 
				
			||||||
HELP "Numero di Fax del vettore"
 | 
					HELP "Numero di Fax del vettore"
 | 
				
			||||||
FIELD S5[11,20]
 | 
					FIELD S5[11,20]
 | 
				
			||||||
FLAGS "U"
 | 
					FLAGS "U"
 | 
				
			||||||
@ -197,29 +237,12 @@ END
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
STRING F_FAX 20
 | 
					STRING F_FAX 20
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
PROMPT 30 16 ""
 | 
					PROMPT 30 17 ""
 | 
				
			||||||
HELP "Numero di Fax del vettore"
 | 
					HELP "Numero di Fax del vettore"
 | 
				
			||||||
FIELD S4
 | 
					FIELD S4
 | 
				
			||||||
FLAGS "U"
 | 
					FLAGS "U"
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
STRING F_PTELEX 10
 | 
					 | 
				
			||||||
BEGIN
 | 
					 | 
				
			||||||
PROMPT 2 17 "Telex     "
 | 
					 | 
				
			||||||
HELP "Numero di Telex del vettore"
 | 
					 | 
				
			||||||
FIELD S2[1,10]
 | 
					 | 
				
			||||||
FLAGS "U"
 | 
					 | 
				
			||||||
END
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
STRING F_TELEX 20
 | 
					 | 
				
			||||||
BEGIN
 | 
					 | 
				
			||||||
PROMPT 30 17 ""
 | 
					 | 
				
			||||||
HELP "Numero di Telex del vettore"
 | 
					 | 
				
			||||||
FIELD S2[11,30]
 | 
					 | 
				
			||||||
FLAGS "U"
 | 
					 | 
				
			||||||
END
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ENDPAGE
 | 
					ENDPAGE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENDMASK
 | 
					ENDMASK
 | 
				
			||||||
 | 
				
			|||||||
@ -12,7 +12,7 @@
 | 
				
			|||||||
#include "fp0.h"
 | 
					#include "fp0.h"
 | 
				
			||||||
#include "fp0300a.h"
 | 
					#include "fp0300a.h"
 | 
				
			||||||
#include <memory>
 | 
					#include <memory>
 | 
				
			||||||
 | 
					#include <map>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/////////////////////////////////////////////////////////////////////////////////////
 | 
					/////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
// Globals
 | 
					// Globals
 | 
				
			||||||
@ -20,6 +20,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define LEN_HFATT 20
 | 
					#define LEN_HFATT 20
 | 
				
			||||||
#define LEN_BFATT 50
 | 
					#define LEN_BFATT 50
 | 
				
			||||||
 | 
					#define MAPPA_DOC_SCELTI map<TString,TToken_string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/////////////////////////////////////////////////////////////////////////////////////
 | 
					/////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
// TPa_mask
 | 
					// TPa_mask
 | 
				
			||||||
@ -28,12 +29,14 @@
 | 
				
			|||||||
class TPA_mask : public TAutomask
 | 
					class TPA_mask : public TAutomask
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
 | 
						enum {_codnum, _tipodoc, _dastato, _astato, _tiposdi};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void         set_filter_changed();
 | 
						void         set_filter_changed();
 | 
				
			||||||
	virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
				
			||||||
	void         next_page(int                   p);
 | 
						void         next_page(int                   p);
 | 
				
			||||||
	bool         check_not_empty();
 | 
						bool         check_not_empty();
 | 
				
			||||||
	bool check_full_fields() const;
 | 
						bool check_full_fields() const;
 | 
				
			||||||
	bool check_tipo_doc(const TTipo_documento& td);
 | 
						bool check_doc_filter(const TDocumentoEsteso& td);
 | 
				
			||||||
	void fill();
 | 
						void fill();
 | 
				
			||||||
	void init();
 | 
						void init();
 | 
				
			||||||
	bool is_fattura(const TRectype& doc) const;
 | 
						bool is_fattura(const TRectype& doc) const;
 | 
				
			||||||
@ -41,7 +44,7 @@ protected:
 | 
				
			|||||||
	void load_all_fields();
 | 
						void load_all_fields();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bool _filter_changed;
 | 
						bool _filter_changed;
 | 
				
			||||||
	unique_ptr<TToken_string> _tipi_doc_scelti;
 | 
						unique_ptr<MAPPA_DOC_SCELTI> _doc_scelti;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
	TPA_mask() : TAutomask("fp0300a"), _filter_changed(true)
 | 
						TPA_mask() : TAutomask("fp0300a"), _filter_changed(true)
 | 
				
			||||||
@ -66,31 +69,56 @@ void TPA_mask::save_all_fields() const
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	ini_set_string(CONFIG_DITTA, "fp", "dataini", get(F_DATAINI));
 | 
						ini_set_string(CONFIG_DITTA, "fp", "dataini", get(F_DATAINI));
 | 
				
			||||||
	ini_set_string(CONFIG_DITTA, "fp", "dataend", get(F_DATAEND));
 | 
						ini_set_string(CONFIG_DITTA, "fp", "dataend", get(F_DATAEND));
 | 
				
			||||||
	ini_set_string(CONFIG_DITTA, "fp", "codnum", get(F_CODNUM));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	TToken_string tipidocs = get_tmp_string();
 | 
						TToken_string tipidocs(get_tmp_string(), ';');
 | 
				
			||||||
	FOR_EACH_SHEET_ROW(sfield(F_DOCUMENTI_TIPO), n, r)
 | 
						FOR_EACH_SHEET_ROW(sfield(F_DOCUMENTI_TIPO), n, r)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		tipidocs.add(r->get(0));
 | 
							TToken_string app;
 | 
				
			||||||
 | 
							// Prendo tutta la riga tranne il cod sdi
 | 
				
			||||||
 | 
							app.add(r->get(_codnum));
 | 
				
			||||||
 | 
							app.add(r->get(_tipodoc));
 | 
				
			||||||
 | 
							app.add(r->get(_dastato));
 | 
				
			||||||
 | 
							app.add(r->get(_astato));
 | 
				
			||||||
 | 
							tipidocs.add(app);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ini_set_string(CONFIG_DITTA, "fp", "tipodocs", tipidocs);
 | 
						ini_set_string(CONFIG_DITTA, "fp", "accepted_docs", tipidocs);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TPA_mask::load_all_fields()
 | 
					void TPA_mask::load_all_fields()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	set(F_DATAINI, ini_get_string(CONFIG_DITTA, "fp", "dataini"));
 | 
						set(F_DATAINI, ini_get_string(CONFIG_DITTA, "fp", "dataini"));
 | 
				
			||||||
	set(F_DATAEND, ini_get_string(CONFIG_DITTA, "fp", "dataend"));
 | 
						set(F_DATAEND, ini_get_string(CONFIG_DITTA, "fp", "dataend"));
 | 
				
			||||||
	set(F_CODNUM, ini_get_string(CONFIG_DITTA, "fp", "codnum"));
 | 
					 | 
				
			||||||
	TToken_string tipidocs(ini_get_string(CONFIG_DITTA, "fp", "tipodocs"));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const TToken_string s_accepted_docs(ini_get_string(CONFIG_DITTA, "fp", "accepted_docs"), ';');
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
	auto& sheet = sfield(F_DOCUMENTI_TIPO);
 | 
						auto& sheet = sfield(F_DOCUMENTI_TIPO);
 | 
				
			||||||
	sheet.hide();
 | 
						sheet.hide();
 | 
				
			||||||
	FOR_EACH_STR_TOKEN(tipidocs, tok)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TToken_string& row = sheet.row(-1);
 | 
						if(s_accepted_docs.full())
 | 
				
			||||||
		row.add(tok);
 | 
						{
 | 
				
			||||||
		row.add(TTipo_documento(tok).tipo_doc_sdi());
 | 
							// Nuova gestione avanzata!
 | 
				
			||||||
 | 
							FOR_EACH_STR_TOKEN(s_accepted_docs, tok)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								TToken_string& row = sheet.row(-1);
 | 
				
			||||||
 | 
								row.add(tok);
 | 
				
			||||||
 | 
								row.add(TTipo_documento(tok).tipo_doc_sdi());
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							// Vecchia gestione ):
 | 
				
			||||||
 | 
							const TString& codnum = ini_get_string(CONFIG_DITTA, "fp", "codnum");
 | 
				
			||||||
 | 
							TToken_string tipidocs(ini_get_string(CONFIG_DITTA, "fp", "tipodocs"));
 | 
				
			||||||
 | 
							FOR_EACH_STR_TOKEN(tipidocs, tok)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								TToken_string& row = sheet.row(-1);
 | 
				
			||||||
 | 
								row.add(codnum);
 | 
				
			||||||
 | 
								row.add(tok);
 | 
				
			||||||
 | 
								// Considero 1 e 9 come stati default?
 | 
				
			||||||
 | 
								row.add(1);
 | 
				
			||||||
 | 
								row.add(9);
 | 
				
			||||||
 | 
								row.add(TTipo_documento(tok).tipo_doc_sdi());
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	sheet.force_update();
 | 
						sheet.force_update();
 | 
				
			||||||
	sheet.show();
 | 
						sheet.show();
 | 
				
			||||||
@ -119,9 +147,8 @@ TString& add_filter(const TString& field, const TString& from, const TString& to
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void TPA_mask::fill()
 | 
					void TPA_mask::fill()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	save_all_fields();
 | 
					 | 
				
			||||||
	// Pulisco i tipi documento
 | 
						// Pulisco i tipi documento
 | 
				
			||||||
	_tipi_doc_scelti.reset();
 | 
						_doc_scelti.reset();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	TSheet_field&  docs = sfield(F_DOCS);
 | 
						TSheet_field&  docs = sfield(F_DOCS);
 | 
				
			||||||
	TString_array& sht  = docs.rows_array();
 | 
						TString_array& sht  = docs.rows_array();
 | 
				
			||||||
@ -130,6 +157,7 @@ void TPA_mask::fill()
 | 
				
			|||||||
	sht.destroy();
 | 
						sht.destroy();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const TDate dal             = get(F_DATAINI);
 | 
						const TDate dal             = get(F_DATAINI);
 | 
				
			||||||
 | 
						const TDate al							= get(F_DATAEND);
 | 
				
			||||||
	TString filter_selected		  = get(F_FATTSEL);
 | 
						TString filter_selected		  = get(F_FATTSEL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef DBG
 | 
					#ifdef DBG
 | 
				
			||||||
@ -144,21 +172,18 @@ void TPA_mask::fill()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	TString query;
 | 
						TString query;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	query << "USE 33 KEY 3" <<
 | 
						query << "USE 33 KEY 3 \n" <<
 | 
				
			||||||
					 "\nSELECT (33.TIPOCF=='C')&&" <<
 | 
							"SELECT 33.TIPOCF==\"C\" \n" <<
 | 
				
			||||||
					 "(33.CODNUM==#CODNUM)";
 | 
							"JOIN 20 INTO TIPOCF==TIPOCF CODCF==CODCF \n" <<
 | 
				
			||||||
 | 
							"JOIN 17 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF \n" <<
 | 
				
			||||||
	query <<	"\nJOIN 20 INTO TIPOCF==TIPOCF CODCF==CODCF \n" <<
 | 
							"JOIN %TIP TO 33 ALIAS 400 INTO CODTAB==TIPODOC \n" <<
 | 
				
			||||||
						"JOIN 17 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF  \n" <<
 | 
							"FROM DATADOC=#DADATADOC \n" <<
 | 
				
			||||||
						"JOIN %TIP TO 33 ALIAS 400 INTO CODTAB==TIPODOC\n" <<
 | 
							"TO DATADOC=#ADATADOC";
 | 
				
			||||||
						"FROM DATADOC=#DADATADOC\n" <<
 | 
					 | 
				
			||||||
						"TO DATADOC=#ADATADOC";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	TISAM_recordset rec(query);
 | 
						TISAM_recordset rec(query);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rec.set_var("#CODNUM", get(F_CODNUM));
 | 
						rec.set_var("#DADATADOC", dal);
 | 
				
			||||||
	rec.set_var("#DADATADOC", get_date(F_DATAINI));
 | 
						rec.set_var("#ADATADOC", al);
 | 
				
			||||||
	rec.set_var("#ADATADOC", get_date(F_DATAEND));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	TProgress_monitor pi(rec.items(), nullptr);
 | 
						TProgress_monitor pi(rec.items(), nullptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -175,8 +200,10 @@ void TPA_mask::fill()
 | 
				
			|||||||
		const TRectype& doc = rec.cursor()->curr();
 | 
							const TRectype& doc = rec.cursor()->curr();
 | 
				
			||||||
		const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC));
 | 
							const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Controllo che la numerazione sia tra quelle giuste
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Controllo che il tipo documento sia OK
 | 
							// Controllo che il tipo documento sia OK
 | 
				
			||||||
		if(!check_tipo_doc(td))
 | 
							if(!check_doc_filter(doc))
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool sent = false;
 | 
							bool sent = false;
 | 
				
			||||||
@ -373,20 +400,30 @@ bool TPA_mask::check_full_fields() const
 | 
				
			|||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool TPA_mask::check_tipo_doc(const TTipo_documento& td)
 | 
					bool TPA_mask::check_doc_filter(const TDocumentoEsteso& d)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	// Mi precarico la tabella dei documenti scelti
 | 
						const TTipo_documento& td = cached_tipodoc(d.get(DOC_TIPODOC));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(_tipi_doc_scelti == nullptr)
 | 
						// Mi precarico la tabella dei documenti scelti
 | 
				
			||||||
 | 
						if(_doc_scelti == nullptr)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		_tipi_doc_scelti.reset(new TToken_string());
 | 
							_doc_scelti.reset(new MAPPA_DOC_SCELTI);
 | 
				
			||||||
		FOR_EACH_SHEET_ROW(sfield(F_DOCUMENTI_TIPO), n, r)
 | 
							FOR_EACH_SHEET_ROW(sfield(F_DOCUMENTI_TIPO), n, r)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			_tipi_doc_scelti->add(r->get(0));
 | 
								MAPPA_DOC_SCELTI & app = *_doc_scelti;
 | 
				
			||||||
 | 
								TToken_string& tipi = app[r->get(_codnum)];
 | 
				
			||||||
 | 
								if(tipi.find(r->get(_tipodoc)) < 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									tipi.add(r->get(_tipodoc));
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// Controllo innanzitutto che sia tra quelli scelti
 | 
						// Controllo innanzitutto che sia tra quelli scelti
 | 
				
			||||||
	return _tipi_doc_scelti->find(td.codice()) >= 0 && td.tipo_doc_sdi().full() && td.reg_fisc().full();
 | 
						return
 | 
				
			||||||
 | 
							_doc_scelti->find(d.codice_numerazione().codice()) != _doc_scelti->end() &&	// Esiste il codice numerazione
 | 
				
			||||||
 | 
							(*_doc_scelti)[d.codice_numerazione().codice()].find(td.codice()) >= 0 &&  // Se esiste il tipo documento
 | 
				
			||||||
 | 
							td.reg_fisc().full();	// Se ha il regime fiscale
 | 
				
			||||||
 | 
						
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -2,14 +2,16 @@
 | 
				
			|||||||
#define F_DATAINI   401
 | 
					#define F_DATAINI   401
 | 
				
			||||||
#define F_DATAEND   402
 | 
					#define F_DATAEND   402
 | 
				
			||||||
#define F_FATTSEL   403
 | 
					#define F_FATTSEL   403
 | 
				
			||||||
#define F_CODNUM    404
 | 
					 | 
				
			||||||
#define END_MASK    499
 | 
					#define END_MASK    499
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define F_DOCUMENTI_TIPO 301
 | 
					#define F_DOCUMENTI_TIPO 301
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define S_TIPODOCSEL  101
 | 
					#define S_SELCODNUM   101
 | 
				
			||||||
#define S_TIPODOCSDI  102
 | 
					#define S_TIPODOCSEL  102
 | 
				
			||||||
 | 
					#define S_DASTATO     103
 | 
				
			||||||
 | 
					#define S_ASTATO      104
 | 
				
			||||||
 | 
					#define S_TIPODOCSDI  105
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define F_DOCS     201
 | 
					#define F_DOCS     201
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -15,40 +15,29 @@ END
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
DATE F_DATAEND
 | 
					DATE F_DATAEND
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 40 1 "Data finale "
 | 
					  PROMPT 50 1 "Data finale "
 | 
				
			||||||
  VALIDATE DATE_CMP_FUNC >= F_DATAINI
 | 
					  VALIDATE DATE_CMP_FUNC >= F_DATAINI
 | 
				
			||||||
  WARNING "La data finale non può essere minore della data iniziale"
 | 
					  WARNING "La data finale non può essere minore della data iniziale"
 | 
				
			||||||
  CHECKTYPE REQUIRED
 | 
					  CHECKTYPE REQUIRED
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RADIOBUTTON F_FATTSEL 3 35
 | 
					RADIOBUTTON F_FATTSEL 3 80
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 1 2 "Fatture da visualizzare"
 | 
					  PROMPT 1 2 "Fatture da visualizzare"
 | 
				
			||||||
  ITEM "|Da inviare"
 | 
					  ITEM "|Da inviare"
 | 
				
			||||||
  ITEM "X|XML Generato"
 | 
					  ITEM "X|XML Generato"
 | 
				
			||||||
  ITEM "N|Notificato"
 | 
					  ITEM "N|Notificato"
 | 
				
			||||||
  ITEM "E|In errore"
 | 
					  ITEM "E|In errore"
 | 
				
			||||||
 | 
					  FLAGS "Z"
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
STRING F_CODNUM 4
 | 
					SPREADSHEET F_DOCUMENTI_TIPO 80 5
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 40 2 "Numerazione "
 | 
					  PROMPT 1 6 ""
 | 
				
			||||||
  HELP "Codice numerazione"
 | 
					  ITEM "Cod Num"
 | 
				
			||||||
  USE %NUM
 | 
					 | 
				
			||||||
  INPUT CODTAB F_CODNUM
 | 
					 | 
				
			||||||
  DISPLAY "Codice" CODTAB
 | 
					 | 
				
			||||||
  DISPLAY "Descrizione@50" S0
 | 
					 | 
				
			||||||
  OUTPUT F_CODNUM CODTAB
 | 
					 | 
				
			||||||
  CHECKTYPE REQUIRED
 | 
					 | 
				
			||||||
  FLAG "UPA"
 | 
					 | 
				
			||||||
  WARNING "Numerazione assente"
 | 
					 | 
				
			||||||
  KEY 1 2
 | 
					 | 
				
			||||||
END
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SPREADSHEET F_DOCUMENTI_TIPO 25 5
 | 
					 | 
				
			||||||
BEGIN
 | 
					 | 
				
			||||||
  PROMPT 40 3 ""
 | 
					 | 
				
			||||||
  ITEM "Tipo Doc"
 | 
					  ITEM "Tipo Doc"
 | 
				
			||||||
 | 
					  ITEM "Stato Iniziale"
 | 
				
			||||||
 | 
					  ITEM "Stato Finale"
 | 
				
			||||||
  ITEM "Tipo SDI"
 | 
					  ITEM "Tipo SDI"
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -68,7 +57,7 @@ BEGIN
 | 
				
			|||||||
  ITEM "Data\nDoc.@10"
 | 
					  ITEM "Data\nDoc.@10"
 | 
				
			||||||
  ITEM "Cliente"
 | 
					  ITEM "Cliente"
 | 
				
			||||||
  ITEM "Ragione Sociale@50"
 | 
					  ITEM "Ragione Sociale@50"
 | 
				
			||||||
  ITEM "Codice destinatario"
 | 
					  ITEM "Codice destinatario@20"
 | 
				
			||||||
  ITEM "Riferimento\nAmministrazione@20"
 | 
					  ITEM "Riferimento\nAmministrazione@20"
 | 
				
			||||||
  ITEM "Codice Fiscale@16"
 | 
					  ITEM "Codice Fiscale@16"
 | 
				
			||||||
  ITEM "Scissione\nPagamenti@9"
 | 
					  ITEM "Scissione\nPagamenti@9"
 | 
				
			||||||
@ -79,11 +68,26 @@ END
 | 
				
			|||||||
ENDPAGE
 | 
					ENDPAGE
 | 
				
			||||||
ENDMASK
 | 
					ENDMASK
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PAGE "Riga tipo doc" -1 -1 25 3
 | 
					PAGE "Riga tipo doc" -1 -1 50 3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRING S_SELCODNUM 4
 | 
				
			||||||
 | 
					BEGIN
 | 
				
			||||||
 | 
					  PROMPT 1 1 "Numerazione "
 | 
				
			||||||
 | 
					  HELP "Codice numerazione"
 | 
				
			||||||
 | 
					  USE %NUM
 | 
				
			||||||
 | 
					  INPUT CODTAB S_SELCODNUM
 | 
				
			||||||
 | 
					  DISPLAY "Codice" CODTAB
 | 
				
			||||||
 | 
					  DISPLAY "Descrizione@50" S0
 | 
				
			||||||
 | 
					  OUTPUT S_SELCODNUM CODTAB
 | 
				
			||||||
 | 
					  CHECKTYPE REQUIRED
 | 
				
			||||||
 | 
					  FLAG "UPA"
 | 
				
			||||||
 | 
					  WARNING "Numerazione assente"
 | 
				
			||||||
 | 
					  KEY 1 2
 | 
				
			||||||
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
STRING S_TIPODOCSEL 4
 | 
					STRING S_TIPODOCSEL 4
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 1 1  "Tipo doc    "
 | 
					  PROMPT 15 1  "Tipo doc    "
 | 
				
			||||||
  HELP "Codice tipo documento"
 | 
					  HELP "Codice tipo documento"
 | 
				
			||||||
  USE %TIP
 | 
					  USE %TIP
 | 
				
			||||||
  SELECT S3[37,40]!=""
 | 
					  SELECT S3[37,40]!=""
 | 
				
			||||||
@ -97,9 +101,31 @@ BEGIN
 | 
				
			|||||||
  FLAG "UPA"
 | 
					  FLAG "UPA"
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRING S_DASTATO 1
 | 
				
			||||||
 | 
					BEGIN
 | 
				
			||||||
 | 
					  PROMPT 1 2 "Da stato "
 | 
				
			||||||
 | 
					  USE %STD
 | 
				
			||||||
 | 
					  INPUT CODTAB S_DASTATO
 | 
				
			||||||
 | 
					  DISPLAY "Codice" CODTAB
 | 
				
			||||||
 | 
					  DISPLAY "Descrizione@50" S0
 | 
				
			||||||
 | 
					  OUTPUT S_DASTATO CODTAB  
 | 
				
			||||||
 | 
					  FLAG "U"  
 | 
				
			||||||
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRING S_ASTATO 1
 | 
				
			||||||
 | 
					BEGIN
 | 
				
			||||||
 | 
					  PROMPT 15 2 "A stato "
 | 
				
			||||||
 | 
					  USE %STD
 | 
				
			||||||
 | 
					  INPUT CODTAB S_ASTATO
 | 
				
			||||||
 | 
					  DISPLAY "Codice" CODTAB
 | 
				
			||||||
 | 
					  DISPLAY "Descrizione@50" S0
 | 
				
			||||||
 | 
					  OUTPUT S_ASTATO CODTAB  
 | 
				
			||||||
 | 
					  FLAG "U"  
 | 
				
			||||||
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
STRING S_TIPODOCSDI 4
 | 
					STRING S_TIPODOCSDI 4
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 1 2  "Tipo Doc SDI"
 | 
					  PROMPT 30 1  "Tipo Doc SDI"
 | 
				
			||||||
  FLAG "D"
 | 
					  FLAG "D"
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -181,7 +207,7 @@ BEGIN
 | 
				
			|||||||
  FLAGS "D"
 | 
					  FLAGS "D"
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
STRING S_UFFICIO 20
 | 
					STRING S_UFFICIO 50 20
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 1 5 ""
 | 
					  PROMPT 1 5 ""
 | 
				
			||||||
  FLAGS "D"
 | 
					  FLAGS "D"
 | 
				
			||||||
 | 
				
			|||||||
@ -13,6 +13,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "../fe/felib.h"
 | 
					#include "../fe/felib.h"
 | 
				
			||||||
#include "../cg/cglib03.h"
 | 
					#include "../cg/cglib03.h"
 | 
				
			||||||
 | 
					#include "../ve/velib04.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <anagiu.h>
 | 
					#include <anagiu.h>
 | 
				
			||||||
#include <comuni.h>
 | 
					#include <comuni.h>
 | 
				
			||||||
@ -840,24 +841,37 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
 | 
				
			|||||||
	_hfatt.cut(0);
 | 
						_hfatt.cut(0);
 | 
				
			||||||
	_bfatt.cut(0);
 | 
						_bfatt.cut(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!chiave_paf(doc, _hfatt, _bfatt))
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						log(-1, _bfatt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef  DBG
 | 
				
			||||||
 | 
						// Controllo se il documento è almeno in stato di stampa
 | 
				
			||||||
 | 
						if (doc.stato() < doc.tipo().stato_finale_stampa())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							log(3, "Il documento non è stato ancora stampato, verrà saltato");
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	TAnagrafica clifo(doc.clifor().tipo(), doc.clifor().codice());
 | 
						TAnagrafica clifo(doc.clifor().tipo(), doc.clifor().codice());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	TString8 coddest = doc.clifor().vendite().get("PADESTIN");
 | 
						TString8 coddest;
 | 
				
			||||||
	TString pec = doc.clifor().get("PEC");
 | 
						TString pec;
 | 
				
			||||||
	const bool is_pa = doc.clifor().get_int("ALLEG") == 7;
 | 
						const bool is_pa = doc.clifor().get_int("ALLEG") == 7;
 | 
				
			||||||
 | 
					#ifndef DBG
 | 
				
			||||||
	if (!get_coddest(doc.clifor().tipo(), doc.clifor().codice(), coddest, pec))
 | 
						if (!get_coddest(doc.clifor().tipo(), doc.clifor().codice(), coddest, pec))
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						coddest = "WSUHKZ";
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const bool enapec = coddest == "0000000" && pec.full();
 | 
						const bool enapec = coddest == "0000000" && pec.full();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const bool privato = coddest.len() != 6;
 | 
						const bool privato = coddest.len() != 6;
 | 
				
			||||||
	bool ok = true;
 | 
						bool ok = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!chiave_paf(doc, _hfatt, _bfatt))
 | 
					 | 
				
			||||||
			return false;
 | 
					 | 
				
			||||||
	log(-1, _bfatt);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	const TFirm&      firm = prefix().firm();
 | 
						const TFirm&      firm = prefix().firm();
 | 
				
			||||||
	const char* const paese = "IT";
 | 
						const char* const paese = "IT";
 | 
				
			||||||
	TCausale          caus = TCausale(doc.tipo().causale(), doc.anno());
 | 
						TCausale          caus = TCausale(doc.tipo().causale(), doc.anno());
 | 
				
			||||||
@ -881,6 +895,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
 | 
				
			|||||||
	ok &= insert(paf0100f);
 | 
						ok &= insert(paf0100f);
 | 
				
			||||||
	// </DatiTrassmissione>
 | 
						// </DatiTrassmissione>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef DBG
 | 
				
			||||||
	if (enapec)
 | 
						if (enapec)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
			// <Datipec>
 | 
								// <Datipec>
 | 
				
			||||||
@ -892,6 +907,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
 | 
				
			|||||||
			ok &= insert(paf3200f);
 | 
								ok &= insert(paf3200f);
 | 
				
			||||||
			// </Datipec>
 | 
								// </Datipec>
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// <CedentePrestatore>
 | 
						// <CedentePrestatore>
 | 
				
			||||||
	TPaf_record paf0200f("PAF0200F");
 | 
						TPaf_record paf0200f("PAF0200F");
 | 
				
			||||||
@ -972,12 +988,17 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
 | 
				
			|||||||
	paf0400f.set("P4_KEYBODYFATT", _bfatt);
 | 
						paf0400f.set("P4_KEYBODYFATT", _bfatt);
 | 
				
			||||||
	remove(paf0400f);
 | 
						remove(paf0400f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef DBG
 | 
				
			||||||
	if (cliente.partita_IVA().full())
 | 
						if (cliente.partita_IVA().full())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
			paf0400f.set("P4_FISCIVAPAESE", cliente.stato_partita_IVA());
 | 
								paf0400f.set("P4_FISCIVAPAESE", cliente.stato_partita_IVA());
 | 
				
			||||||
			paf0400f.set("P4_FISCIVACOD", cliente.partita_IVA());
 | 
								paf0400f.set("P4_FISCIVACOD", cliente.partita_IVA());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	paf0400f.set("P4_CODFISC", cliente.codice_fiscale());
 | 
						paf0400f.set("P4_CODFISC", cliente.codice_fiscale());
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						paf0400f.set("P4_FISCIVAPAESE", "IT");
 | 
				
			||||||
 | 
						paf0400f.set("P4_FISCIVACOD", "00261170039");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (cliente.fisica())
 | 
						if (cliente.fisica())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -1179,6 +1200,34 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
 | 
				
			|||||||
			log(1, "CIG e CUP assenti");
 | 
								log(1, "CIG e CUP assenti");
 | 
				
			||||||
	// <DatiBeniServizi>
 | 
						// <DatiBeniServizi>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// <DatiDDT>
 | 
				
			||||||
 | 
						TPaf_record paf1700f("PAF1700F");
 | 
				
			||||||
 | 
						paf1700f.set("PG_KEYHEADERFATT", _hfatt);
 | 
				
			||||||
 | 
						paf1700f.set("PG_KEYBODYFATT", _bfatt);
 | 
				
			||||||
 | 
						remove(paf1700f); // Cancella la riga del vettore
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(doc.get("CODVETT1").full())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							TRectype vet = cache().get("%VET", doc.get("CODVETT1"));
 | 
				
			||||||
 | 
							paf1700f.set("PG_FISCIVAPAESE", vet.get("S3").mid(48,2));
 | 
				
			||||||
 | 
							paf1700f.set("PG_FISCIVACODICE", vet.get("S13").mid(0, 28));
 | 
				
			||||||
 | 
							paf1700f.set("PG_CODICEFISCALE", vet.get("S13").mid(28, 16));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (vet.get_bool("B0"))
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								paf1700f.set("PG_ANANOME", vet.get("S0").mid(0, 30));
 | 
				
			||||||
 | 
								paf1700f.set("PG_ANACOGNOME", vet.get("S0").mid(30, 20));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								paf1700f.set("PG_ANADENOMINAZ", vet.get("S0").mid(0, 50));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							paf1700f.set("PG_ANACODEORI", vet.get("S2").mid(0, 17));
 | 
				
			||||||
 | 
							ok &= insert(paf1700f);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// </DatiDDT>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	TPaf_record paf1800f("PAF1800F");
 | 
						TPaf_record paf1800f("PAF1800F");
 | 
				
			||||||
	paf1800f.set("PI_KEYHEADERFATT", _hfatt);
 | 
						paf1800f.set("PI_KEYHEADERFATT", _hfatt);
 | 
				
			||||||
	paf1800f.set("PI_KEYBODYFATT", _bfatt);
 | 
						paf1800f.set("PI_KEYBODYFATT", _bfatt);
 | 
				
			||||||
@ -1217,6 +1266,9 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
 | 
				
			|||||||
			paf1800f.set("PI_KEYBODYFATT", _bfatt);
 | 
								paf1800f.set("PI_KEYBODYFATT", _bfatt);
 | 
				
			||||||
			paf1800f.set("PI_NUMEROLINEA", ++riga);
 | 
								paf1800f.set("PI_NUMEROLINEA", ++riga);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (descrizione(*rdoc).empty())
 | 
				
			||||||
 | 
									continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			paf3000f.reset();
 | 
								paf3000f.reset();
 | 
				
			||||||
			paf3000f.set("PT_KEYHEADERFATT", _hfatt);
 | 
								paf3000f.set("PT_KEYHEADERFATT", _hfatt);
 | 
				
			||||||
			paf3000f.set("PT_KEYBODYFATT", _bfatt);
 | 
								paf3000f.set("PT_KEYBODYFATT", _bfatt);
 | 
				
			||||||
@ -1227,12 +1279,11 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
 | 
				
			|||||||
			paf1800f.set("PI_QUANTITA", UNO);
 | 
								paf1800f.set("PI_QUANTITA", UNO);
 | 
				
			||||||
			paf1800f.set("PI_PREZZOUNIT", ZERO);
 | 
								paf1800f.set("PI_PREZZOUNIT", ZERO);
 | 
				
			||||||
			paf1800f.set("PI_PRZTOTALE", ZERO);
 | 
								paf1800f.set("PI_PRZTOTALE", ZERO);
 | 
				
			||||||
			paf1800f.set("PI_ALIQUOTAIVA", "22.00"); // Altrimenti scarta le righe di descrizione
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// <CodiceArticolo>
 | 
								// <CodiceArticolo>
 | 
				
			||||||
			long riga_art = 0;
 | 
								long riga_art = 0;
 | 
				
			||||||
			TArticolo& art = rdoc->articolo();
 | 
								TArticolo& art = rdoc->articolo();
 | 
				
			||||||
			if (art.ok())
 | 
								if (art.full())
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
					paf1900f.reset();
 | 
										paf1900f.reset();
 | 
				
			||||||
					paf1900f.set("PY_KEYHEADERFATT", _hfatt);
 | 
										paf1900f.set("PY_KEYHEADERFATT", _hfatt);
 | 
				
			||||||
@ -1433,7 +1484,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
 | 
				
			|||||||
			paf1800f.set("PI_QUANTITA", UNO);
 | 
								paf1800f.set("PI_QUANTITA", UNO);
 | 
				
			||||||
			paf1800f.set("PI_PREZZOUNIT", ZERO);
 | 
								paf1800f.set("PI_PREZZOUNIT", ZERO);
 | 
				
			||||||
			paf1800f.set("PI_PRZTOTALE", ZERO);
 | 
								paf1800f.set("PI_PRZTOTALE", ZERO);
 | 
				
			||||||
			paf1800f.set("PI_ALIQUOTAIVA", "22.00");
 | 
								set_IVA(codivadefault, paf1800f);
 | 
				
			||||||
			ok &= insert(paf1800f) && insert(paf3000f);
 | 
								ok &= insert(paf1800f) && insert(paf3000f);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -1501,25 +1552,12 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
 | 
				
			|||||||
		paf1800f.set("PI_QUANTITA", UNO);
 | 
							paf1800f.set("PI_QUANTITA", UNO);
 | 
				
			||||||
		paf1800f.set("PI_PREZZOUNIT", ZERO);
 | 
							paf1800f.set("PI_PREZZOUNIT", ZERO);
 | 
				
			||||||
		paf1800f.set("PI_PRZTOTALE", ZERO);
 | 
							paf1800f.set("PI_PRZTOTALE", ZERO);
 | 
				
			||||||
		paf1800f.set("PI_ALIQUOTAIVA", "22.00");
 | 
							set_IVA(codivadefault, paf1800f);
 | 
				
			||||||
		ok &= insert(paf1800f) && insert(paf3000f);
 | 
							ok &= insert(paf1800f) && insert(paf3000f);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// </DatiBeniServizi>
 | 
						// </DatiBeniServizi>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
	// <DatiTrasporto>
 | 
					 | 
				
			||||||
	TString cod_vettore = doc.get("CODVETT1");
 | 
					 | 
				
			||||||
	// É una fattura accompagnatoria!
 | 
					 | 
				
			||||||
	if(cod_vettore.full())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		TRectype vettore = cache().get("%VET", cod_vettore);
 | 
					 | 
				
			||||||
		// Controllo di avere tutto quello che mi interessa
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// </DatiTrasporto>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Salvo la testata
 | 
						// Salvo la testata
 | 
				
			||||||
	ok &= insert(paf0700f);
 | 
						ok &= insert(paf0700f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1583,6 +1621,9 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
 | 
				
			|||||||
	paf2500f.set("PO_CONDPAGAMENTO", rateazione); // Condizione di pagamento PA
 | 
						paf2500f.set("PO_CONDPAGAMENTO", rateazione); // Condizione di pagamento PA
 | 
				
			||||||
	paf2500f.set("PO_CODICEPAGAM", pag.code());   // Condizione di pagamento CAMPO   
 | 
						paf2500f.set("PO_CODICEPAGAM", pag.code());   // Condizione di pagamento CAMPO   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						TRectype cod_pag = cache().get("CPG", doc.pagamento().code());
 | 
				
			||||||
 | 
						const int tipo_pag = cod_pag.get_int("S4");
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	TString80 iban, istituto;
 | 
						TString80 iban, istituto;
 | 
				
			||||||
	TString8  abi, cab;
 | 
						TString8  abi, cab;
 | 
				
			||||||
	if (get_bank(doc, iban, abi, cab, istituto))
 | 
						if (get_bank(doc, iban, abi, cab, istituto))
 | 
				
			||||||
@ -1593,21 +1634,20 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
 | 
				
			|||||||
			paf2500f.set("PO_CAB", cab);
 | 
								paf2500f.set("PO_CAB", cab);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (cab.blank())
 | 
						if (tipo_pag == 3 && cab.blank())	// Ricevuta bancaria
 | 
				
			||||||
			log(2, TR("Non sono presenti ABI, CAB, IBAN per il pagamento"));
 | 
								log(2, TR("Non sono presenti ABI, CAB, IBAN per il pagamento"));
 | 
				
			||||||
	else if (iban.blank())
 | 
					
 | 
				
			||||||
			log(1, TR("Non è presente il codice IBAN per il pagamento"));
 | 
						if ((tipo_pag == 8 || tipo_pag == 9) && iban.blank()) // R.I.D. o Bonifico
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							log(1, TR("Non è presente il codice IBAN per il pagamento"));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (int nr = 0; nr < nrate; nr++)
 | 
						for (int nr = 0; nr < nrate; nr++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
			paf2500f.set("PO_RIGA", long(nr + 1)); // Numero rata
 | 
								paf2500f.set("PO_RIGA", long(nr + 1)); // Numero rata
 | 
				
			||||||
			int rp = nr < pag.n_rate() ? nr : 0;
 | 
								int rp = nr < pag.n_rate() ? nr : 0;
 | 
				
			||||||
			static TString key_class; key_class.cut(0) << pag.tipo_rata(rp) << pag.ulc_rata(rp);
 | 
								static TString key_class; key_class.cut(0) << pag.tipo_rata(rp) << pag.ulc_rata(rp);
 | 
				
			||||||
#ifdef DBG
 | 
					
 | 
				
			||||||
			bool tolla = true;
 | 
					 | 
				
			||||||
			TString pop = cache().get("%CLR", key_class, "S12");
 | 
					 | 
				
			||||||
			bool aaaa = true;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
			paf2500f.set("PO_MODALITAPAGAM", cache().get("%CLR", key_class, "S12")); // Si assicura che il numero riga sia accettabile
 | 
								paf2500f.set("PO_MODALITAPAGAM", cache().get("%CLR", key_class, "S12")); // Si assicura che il numero riga sia accettabile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			TToken_string& riga = scad.row(nr);                  // Data|Importo   
 | 
								TToken_string& riga = scad.row(nr);                  // Data|Importo   
 | 
				
			||||||
@ -1685,15 +1725,16 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	// </DatiPagamento>
 | 
						// </DatiPagamento>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Tabella di non invio XML
 | 
						if (!cached_tipodoc(doc.get(DOC_TIPODOC)).invio_xml())
 | 
				
			||||||
	TPaf_record pafw300f("PAFW300F");
 | 
						{
 | 
				
			||||||
	pafw300f.set("PW_KEYHEADERFATT", _hfatt);
 | 
							// Tabella di non invio XML
 | 
				
			||||||
	pafw300f.set("PW_KEYBODYFATT", _bfatt);
 | 
							TPaf_record pafw300f("PAFW300F");
 | 
				
			||||||
	remove(pafw300f); // Cancella eventuali allegati
 | 
							pafw300f.set("PW_KEYHEADERFATT", _hfatt);
 | 
				
			||||||
	const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC));
 | 
							pafw300f.set("PW_KEYBODYFATT", _bfatt);
 | 
				
			||||||
	const TString codsdi = !td.invio_xml() ? "**********" : (enapec ? pec : coddest);
 | 
							remove(pafw300f);
 | 
				
			||||||
	pafw300f.set("PW_CODSDI", codsdi);
 | 
							pafw300f.set("PW_CODSDI", "**********");
 | 
				
			||||||
	ok &= insert(pafw300f);
 | 
							ok &= insert(pafw300f);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return _to_commit = (ok && save_paf());
 | 
						return _to_commit = (ok && save_paf());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -102,7 +102,7 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
	bool parse_sconto(const TString&                   formula, TToken_string& sconti) const;
 | 
						bool parse_sconto(const TString&                   formula, TToken_string& sconti) const;
 | 
				
			||||||
static bool get_bnp_iban(const TString&                   abi, const TString&     cab, int       prg, TString& iban);
 | 
						static bool get_bnp_iban(const TString&                   abi, const TString&     cab, int       prg, TString& iban);
 | 
				
			||||||
	bool get_bank(const TDocumento&                    doc, TString& iban, TString& abi, TString& cab, TString& istituto) const;
 | 
						bool get_bank(const TDocumento&                    doc, TString& iban, TString& abi, TString& cab, TString& istituto) const;
 | 
				
			||||||
	const TString&      descrizione(const TRiga_documento& rdoc) const;
 | 
						const TString&      descrizione(const TRiga_documento& rdoc) const;
 | 
				
			||||||
	const TRectype& cco(const TRectype&                doc) const; // Contratto/Convenzione/Offerta
 | 
						const TRectype& cco(const TRectype&                doc) const; // Contratto/Convenzione/Offerta
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user