Patch level : 12.0 836
Files correlati : fp0.exe Commento : - Esportazione da f1-fp delle ritenute di acconto - Correzione se importo e' nullo
This commit is contained in:
		
							parent
							
								
									ff97af3473
								
							
						
					
					
						commit
						82c61d5f93
					
				| @ -8,6 +8,7 @@ | |||||||
| #include "../fp/fp0400a.h" | #include "../fp/fp0400a.h" | ||||||
| #include "reputils.h" | #include "reputils.h" | ||||||
| #include "../fp/fplib.h" | #include "../fp/fplib.h" | ||||||
|  | #include "causali.h" | ||||||
| 
 | 
 | ||||||
| //////////////////////////////////////////////////////////
 | //////////////////////////////////////////////////////////
 | ||||||
| // TFppro
 | // TFppro
 | ||||||
| @ -107,6 +108,17 @@ TDate TFppro::get_datareg(TToken_string& keys) | |||||||
| 	return TDate(); | 	return TDate(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | real TFppro::get_ritenute() const | ||||||
|  | { | ||||||
|  | 	TString query; | ||||||
|  | 	query << "SELECT P7_IMPORTORIT AS IMPORTO FROM PAA0700F\n" << | ||||||
|  | 		"WHERE P7_KEYPRGINVIO = '" << _keys.prginvio << "' AND P7_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P7_KEYBODYFATT = '" << _keys.bodyfatt << "'"; | ||||||
|  | 	fp_db().sq_set_exec(query); | ||||||
|  | 	if(fp_db().sq_items() >= 1) | ||||||
|  | 		return fp_db().sq_get_real("IMPORTO"); | ||||||
|  | 	return ZERO; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| bool TFppro::set_keys(TToken_string& keys) | bool TFppro::set_keys(TToken_string& keys) | ||||||
| { | { | ||||||
| 	if(keys.items() == 3) | 	if(keys.items() == 3) | ||||||
| @ -306,6 +318,14 @@ bool check_causale(const TString& cod_caus, const TString& tipo_doc, bool acq) | |||||||
| 	return false; | 	return false; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | bool check_caus_has_rit(const TString& cod_caus, bool rit) | ||||||
|  | { | ||||||
|  | 	TLocalisamfile causali(LF_CAUSALI); | ||||||
|  | 	causali.put(CAU_CODCAUS, cod_caus); | ||||||
|  | 	causali.read(); | ||||||
|  | 	return *causali.get(CAU_M770) != '\0'; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void run_cont_ini(bool liq) | void run_cont_ini(bool liq) | ||||||
| { | { | ||||||
| 	static TString run_string; | 	static TString run_string; | ||||||
|  | |||||||
| @ -49,6 +49,7 @@ public: | |||||||
| 	int		get_numreg(TToken_string& keys); | 	int		get_numreg(TToken_string& keys); | ||||||
| 	TDate	get_datareg(); | 	TDate	get_datareg(); | ||||||
| 	TDate	get_datareg(TToken_string& keys); | 	TDate	get_datareg(TToken_string& keys); | ||||||
|  | 	real	get_ritenute() const; | ||||||
| 	bool	set_query(); | 	bool	set_query(); | ||||||
| 	bool	set_keys(TToken_string& keys); | 	bool	set_keys(TToken_string& keys); | ||||||
| 	bool	set_keys(keys_s keys); | 	bool	set_keys(keys_s keys); | ||||||
| @ -56,7 +57,7 @@ public: | |||||||
| 	static TDate get_data_first_doc(); | 	static TDate get_data_first_doc(); | ||||||
| 
 | 
 | ||||||
| 	TFppro() : _keys({"\0", "\0", "\0" }), _guess(false), _keys_setted(false), _is_set(false) {  } | 	TFppro() : _keys({"\0", "\0", "\0" }), _guess(false), _keys_setted(false), _is_set(false) {  } | ||||||
| 	 | 	TFppro::TFppro(TToken_string& keys) : TFppro() { set_keys(keys); } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| class TProtocollo : TObject | class TProtocollo : TObject | ||||||
| @ -110,5 +111,6 @@ void				set_periodprec(bool flag); | |||||||
| bool				check_causale(const TString& cod_caus, bool acq = true); | bool				check_causale(const TString& cod_caus, bool acq = true); | ||||||
| // Controlla se il "cod_caus" ha come "tipo_doc" FA o NC (di acquisto)
 | // Controlla se il "cod_caus" ha come "tipo_doc" FA o NC (di acquisto)
 | ||||||
| bool				check_causale(const TString& cod_caus, const TString& tipo_doc, bool acq = true); | bool				check_causale(const TString& cod_caus, const TString& tipo_doc, bool acq = true); | ||||||
|  | bool				check_caus_has_rit(const TString& cod_caus, bool rit); | ||||||
| void				run_cont_ini(bool liq); | void				run_cont_ini(bool liq); | ||||||
| #endif | #endif | ||||||
| @ -35,6 +35,12 @@ enum { filtri = 0, elenco_fe = 1, elenco_err = 2 }; // Enum per bottoni toolbar | |||||||
| 
 | 
 | ||||||
| class TPassive_mask : public TAutomask | class TPassive_mask : public TAutomask | ||||||
| { | { | ||||||
|  | 	struct iva | ||||||
|  | 	{ | ||||||
|  | 		real imponibile; | ||||||
|  | 		real imposta; | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
| 	TLog_report*	_log; | 	TLog_report*	_log; | ||||||
| 	bool					_f1; | 	bool					_f1; | ||||||
| 
 | 
 | ||||||
| @ -61,6 +67,8 @@ protected: | |||||||
| 	void	run_cg0(const TString& filename) const; | 	void	run_cg0(const TString& filename) const; | ||||||
| 	void	elenco_prots_sel(TString& string) const; | 	void	elenco_prots_sel(TString& string) const; | ||||||
| 
 | 
 | ||||||
|  | 	vector<iva>& get_righe_iva(TToken_string& keys) const; | ||||||
|  | 	real calcola_importo(vector<iva> riva) const; | ||||||
| 	// Gestione F1
 | 	// Gestione F1
 | ||||||
| 	int		prepara_contab() const; | 	int		prepara_contab() const; | ||||||
| 	void	log_contab(); | 	void	log_contab(); | ||||||
| @ -195,6 +203,36 @@ void TPassive_mask::elenco_prots_sel(TString& string) const | |||||||
| 		string = ""; | 		string = ""; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | vector<TPassive_mask::iva>& TPassive_mask::get_righe_iva(TToken_string& keys) const | ||||||
|  | { | ||||||
|  | 	static vector<iva> riva; | ||||||
|  | 	riva.clear(); | ||||||
|  | 	TString where_q; where_q << "WHERE PL_KEYPRGINVIO = '" << keys.get(0); | ||||||
|  | 	where_q << "' AND PL_KEYHEADERFATT = '" << keys.get(); | ||||||
|  | 	where_q << "' AND PL_KEYBODYFATT = '" << keys.get() << "'"; | ||||||
|  | 	TString query; query << "SELECT PL_IMPONIBILE AS IMPONIBILE, PL_IMPOSTA AS IMPOSTA \nFROM PAA2200F \n" << where_q; | ||||||
|  | 	fp_db().sq_set_exec(query, false); | ||||||
|  | 	for (bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next()) | ||||||
|  | 	{ | ||||||
|  | 		TString imponibile = fp_db().sq_get("IMPONIBILE"); | ||||||
|  | 		TString imposta = fp_db().sq_get("IMPOSTA"); | ||||||
|  | 		if (imponibile.full() || imposta.full()) | ||||||
|  | 			riva.insert(riva.end(), { real(imponibile), real(imposta) }); | ||||||
|  | 	} | ||||||
|  | 	return riva; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | real TPassive_mask::calcola_importo(vector<iva> riva) const | ||||||
|  | { | ||||||
|  | 	real tot = ZERO; | ||||||
|  | 	for(auto it = riva.begin(); it != riva.end(); ++it) | ||||||
|  | 	{ | ||||||
|  | 		tot += it->imponibile; | ||||||
|  | 		tot += it->imposta; | ||||||
|  | 	} | ||||||
|  | 	return tot; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TSheet_field& sf_err) | void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TSheet_field& sf_err) | ||||||
| { | { | ||||||
| 	TString					denom					= fp_db().sq_get("RAG_SOC"); | 	TString					denom					= fp_db().sq_get("RAG_SOC"); | ||||||
| @ -515,11 +553,15 @@ int TPassive_mask::prepara_contab() const | |||||||
| 	FOR_EACH_SHEET_ROW(sf, n, row) { | 	FOR_EACH_SHEET_ROW(sf, n, row) { | ||||||
| 		if (row->starts_with("X")) | 		if (row->starts_with("X")) | ||||||
| 		{ | 		{ | ||||||
|  | 			TString prokeys = row->get(sf.cid2index(S_PROKEY)); | ||||||
|  | 			TToken_string keys(prokeys, ';'); | ||||||
|  | 			TString codcaus(get_codcaus(row->get(2), row->get(10))); | ||||||
|  | 
 | ||||||
| 			if(!TString(row->get(sf.cid2index(S_NUMREGCONT))).empty()) | 			if(!TString(row->get(sf.cid2index(S_NUMREGCONT))).empty()) | ||||||
| 				return n+1000; | 				return n+1000; | ||||||
| 			TString codcaus(get_codcaus(row->get(2), row->get(10))); |  | ||||||
| 			if (codcaus.empty()) | 			if (codcaus.empty()) | ||||||
| 				return no_codcaus; | 				return no_codcaus; | ||||||
|  | 
 | ||||||
| 			TString tipodoc(row->get(sf.cid2index(S_TIPODOCSDI))); | 			TString tipodoc(row->get(sf.cid2index(S_TIPODOCSDI))); | ||||||
| 			if(tipodoc == "TD01" && !check_causale(codcaus, "FA")) | 			if(tipodoc == "TD01" && !check_causale(codcaus, "FA")) | ||||||
| 				if(!yesno_box("Attenzione, per un documento di tipo TD01 e' stata selezionata \nuna causale diversa da Fattura d'Acquisto.\nContinuare?")) | 				if(!yesno_box("Attenzione, per un documento di tipo TD01 e' stata selezionata \nuna causale diversa da Fattura d'Acquisto.\nContinuare?")) | ||||||
| @ -528,6 +570,8 @@ int TPassive_mask::prepara_contab() const | |||||||
| 				if(!yesno_box("Attenzione, per un documento di tipo TD04 e' stata selezionata \nuna causale diversa da Nota Credito di Acquisto.\nContinuare?")) | 				if(!yesno_box("Attenzione, per un documento di tipo TD04 e' stata selezionata \nuna causale diversa da Nota Credito di Acquisto.\nContinuare?")) | ||||||
| 					return cancel; | 					return cancel; | ||||||
| 			n_sel++; | 			n_sel++; | ||||||
|  | 
 | ||||||
|  | 			vector<iva>& riva = get_righe_iva(keys); | ||||||
| 			TString num; num.format("%04d", n); | 			TString num; num.format("%04d", n); | ||||||
| 			TFilename newf_ini; | 			TFilename newf_ini; | ||||||
| #ifndef DBG | #ifndef DBG | ||||||
| @ -536,10 +580,9 @@ int TPassive_mask::prepara_contab() const | |||||||
| 			newf_ini << F1_INIREGCONT << num << ".ini"; | 			newf_ini << F1_INIREGCONT << num << ".ini"; | ||||||
| #endif | #endif | ||||||
| 			TConfig contab_ini(newf_ini, "Transaction"); | 			TConfig contab_ini(newf_ini, "Transaction"); | ||||||
| 			TString prokeys = row->get(sf.cid2index(S_PROKEY)); |  | ||||||
| 
 |  | ||||||
| 			contab_ini.set("Action", "INSERT"); | 			contab_ini.set("Action", "INSERT"); | ||||||
| 
 | 
 | ||||||
|  | 			// Esporto dati di testata
 | ||||||
| 			contab_ini.set_paragraph(LF_MOV); // [23]
 | 			contab_ini.set_paragraph(LF_MOV); // [23]
 | ||||||
| 			contab_ini.set("CODCAUS", codcaus); | 			contab_ini.set("CODCAUS", codcaus); | ||||||
| 			contab_ini.set("CODCF", row->get(sf.cid2index(S_FORNITORE))); | 			contab_ini.set("CODCF", row->get(sf.cid2index(S_FORNITORE))); | ||||||
| @ -547,16 +590,38 @@ int TPassive_mask::prepara_contab() const | |||||||
| 			contab_ini.set("DATADOC", row->get(sf.cid2index(S_DATADOC))); | 			contab_ini.set("DATADOC", row->get(sf.cid2index(S_DATADOC))); | ||||||
| 			contab_ini.set("NUMDOCEXT", row->get(sf.cid2index(S_NDOC))); | 			contab_ini.set("NUMDOCEXT", row->get(sf.cid2index(S_NDOC))); | ||||||
| 			contab_ini.set("NUMDOC", TString(row->get(sf.cid2index(S_NDOC))).right(7)); | 			contab_ini.set("NUMDOC", TString(row->get(sf.cid2index(S_NDOC))).right(7)); | ||||||
| 			contab_ini.set("TOTDOC", abs(real(row->get(sf.cid2index(S_TOTDOC)))).string()); | 			TString totdoc = row->get(sf.cid2index(S_TOTDOC)); | ||||||
|  | 			if(totdoc.empty()) | ||||||
|  | 			{ | ||||||
|  | 				real imp = calcola_importo(riva); | ||||||
|  | 				totdoc.cut(0) << imp; | ||||||
|  | 			} | ||||||
|  | 			real rit = TFppro(keys).get_ritenute(); | ||||||
|  | 			if(rit != ZERO) | ||||||
|  | 			{ | ||||||
|  | 				contab_ini.set("TOTDOC", (abs(real(totdoc)) - rit).string()); | ||||||
|  | 				contab_ini.set("RITFIS", rit.string()); | ||||||
|  | 			} | ||||||
|  | 			else | ||||||
|  | 				contab_ini.set("TOTDOC", abs(real(totdoc)).string()); | ||||||
| 			contab_ini.set("KEYFPPRO", prokeys); | 			contab_ini.set("KEYFPPRO", prokeys); | ||||||
| 
 | 
 | ||||||
|  | 			// Esporto righe iva
 | ||||||
|  | 			int i = 1; | ||||||
|  | 			for (auto it = riva.begin(); it != riva.end(); ++it) | ||||||
|  | 			{ | ||||||
|  | 				contab_ini.set_paragraph(LF_RMOVIVA, i); | ||||||
|  | 				contab_ini.set("IMPONIBILE", it->imponibile.string()); | ||||||
|  | 				contab_ini.set("IMPOSTA", it->imposta.string()); | ||||||
|  | 				contab_ini.set("NRIGA", i); | ||||||
|  | 				i++; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
| 			// Se ci sono le scadenze esporto anche quelle
 | 			// Se ci sono le scadenze esporto anche quelle
 | ||||||
| 			TToken_string keys(prokeys, ';'); |  | ||||||
| 			TString where_q; | 			TString where_q; | ||||||
| 			where_q << "WHERE PO_KEYPRGINVIO = '" << keys.get() << "'"; | 			where_q << "WHERE PO_KEYPRGINVIO = '" << keys.get(0) << "'"; | ||||||
| 			where_q << " AND PO_KEYHEADERFATT = '" << keys.get() << "'"; | 			where_q << " AND PO_KEYHEADERFATT = '" << keys.get() << "'"; | ||||||
| 			where_q << " AND PO_KEYBODYFATT = '" << keys.get() << "'"; | 			where_q << " AND PO_KEYBODYFATT = '" << keys.get() << "'"; | ||||||
| 
 |  | ||||||
| 			TString query; query << "SELECT PO_RIGA AS RIGA, PO_DATASCADENZA AS DATA, PO_IMPORTO AS IMPORTO \nFROM PAA2500F \n" << where_q; | 			TString query; query << "SELECT PO_RIGA AS RIGA, PO_DATASCADENZA AS DATA, PO_IMPORTO AS IMPORTO \nFROM PAA2500F \n" << where_q; | ||||||
| 			 | 			 | ||||||
| 			fp_db().sq_set_exec(query,false); | 			fp_db().sq_set_exec(query,false); | ||||||
| @ -570,25 +635,6 @@ int TPassive_mask::prepara_contab() const | |||||||
| 				contab_ini.set("NRIGA", "1"); | 				contab_ini.set("NRIGA", "1"); | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
| 			where_q.cut(0) << "WHERE PL_KEYPRGINVIO = '" << keys.get(0); |  | ||||||
| 			where_q << "' AND PL_KEYHEADERFATT = '" << keys.get(); |  | ||||||
| 			where_q << "' AND PL_KEYBODYFATT = '" << keys.get() << "'"; |  | ||||||
| 			query.cut(0) << "SELECT PL_IMPONIBILE AS IMPONIBILE, PL_IMPOSTA AS IMPOSTA \nFROM PAA2200F \n" << where_q; |  | ||||||
| 			fp_db().sq_set_exec(query, false); |  | ||||||
| 			int i = 1; |  | ||||||
| 			for (bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next()) |  | ||||||
| 			{ |  | ||||||
| 				TString imponibile	= fp_db().sq_get("IMPONIBILE"); |  | ||||||
| 				TString imposta			= fp_db().sq_get("IMPOSTA"); |  | ||||||
| 				if(imponibile.full() || imposta.full()) |  | ||||||
| 				{ |  | ||||||
| 					contab_ini.set_paragraph(LF_RMOVIVA, i); |  | ||||||
| 					contab_ini.set("IMPONIBILE", imponibile); |  | ||||||
| 					contab_ini.set("IMPOSTA", imposta); |  | ||||||
| 					contab_ini.set("NRIGA", i); |  | ||||||
| 					i++; |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 			row->add("", 0); | 			row->add("", 0); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @ -687,7 +733,7 @@ void TPassive_mask::contabilizza() | |||||||
| 		break; | 		break; | ||||||
| 	case no_codcaus: | 	case no_codcaus: | ||||||
| 		message_box("Attenzione, il fornitore non ha associato nessun codice causale predefinito.\nPrego selezionare un codice causale per la contabilizzazione."); | 		message_box("Attenzione, il fornitore non ha associato nessun codice causale predefinito.\nPrego selezionare un codice causale per la contabilizzazione."); | ||||||
| 		next_page(1000); | 		fill(); | ||||||
| 		break; | 		break; | ||||||
| 	case no_selected: | 	case no_selected: | ||||||
| 		message_box("Selezionare almeno un documento."); | 		message_box("Selezionare almeno un documento."); | ||||||
| @ -743,7 +789,7 @@ void TPassive_mask::new_forn() | |||||||
| 		{ | 		{ | ||||||
| 			TString query; query << "SELECT PU_PEC AS PEC\n" << | 			TString query; query << "SELECT PU_PEC AS PEC\n" << | ||||||
| 			"FROM PAA3200F\n" << | 			"FROM PAA3200F\n" << | ||||||
| 			"WHERE PU_KEYPRGINVIO = '" << keys.get(); | 			"WHERE PU_KEYPRGINVIO = '" << keys.get(0); | ||||||
| 			query << "' AND PU_KEYHEADERFATT = '" << keys.get(); | 			query << "' AND PU_KEYHEADERFATT = '" << keys.get(); | ||||||
| 			query << "' AND PU_KEYBODYFATT = '" << keys.get() << "'"; | 			query << "' AND PU_KEYBODYFATT = '" << keys.get() << "'"; | ||||||
| 			fp_db().sq_set_exec(query); | 			fp_db().sq_set_exec(query); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user