Patch level : 10.0 patch 804
Files correlati : ve0.exe ve6.exe Ricompilazione Demo : [ ] Commento : Bug 0001690: Gestione documenti (ve0), Contabilizzazione documenti( ve6) Aggiungere la possibilità di distribuire le spese sui conti contabili quando quest'ultime non hanno un conto proprio git-svn-id: svn://10.65.10.50/branches/R_10_00@20829 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									3f11c4443a
								
							
						
					
					
						commit
						5d6a9bef1a
					
				| @ -1,5 +1,6 @@ | ||||
| #include <applicat.h> | ||||
| #include "clifor.h" | ||||
| #include "velib.h" | ||||
| #include "../li/letint.h" | ||||
| #include <modaut.h> | ||||
| #include <relation.h> | ||||
| @ -173,6 +174,38 @@ void TCli_for::init() | ||||
| 		_use_lettere = ini_get_bool(CONFIG_DITTA, "ve", "USELETTERE"); | ||||
| } | ||||
| 
 | ||||
| void TCli_for::cli2doc(TDocumento & doc) | ||||
| { | ||||
| 	const TRectype & v = vendite(); | ||||
| 
 | ||||
| 	doc.put(DOC_CODVAL, get(CLI_CODVAL)); | ||||
| 	doc.put(DOC_CODLIN, get(CLI_CODLIN)); | ||||
| 	doc.put(DOC_CODPAG, get(CLI_CODPAG)); | ||||
| 	doc.put(DOC_CODABIA, get(CLI_CODABI)); | ||||
| 	doc.put(DOC_CODCABA, get(CLI_CODCAB)); | ||||
| 	doc.put(DOC_IBAN, get(CLI_IBAN)); | ||||
| 	doc.put(DOC_CODABIP, v.get(CFV_CODABIPR)); | ||||
| 	doc.put(DOC_CODCABP, v.get(CFV_CODCABPR)); | ||||
| 	doc.put(DOC_RAGGR, v.get(CFV_RAGGDOC)); | ||||
| 	doc.put(DOC_RAGGREFF, v.get(CFV_RAGGEFF)); | ||||
| 	doc.put(DOC_CODINDSP, v.get(CFV_CODINDSP)); | ||||
| 	doc.put(DOC_CODAG, v.get(CFV_CODAG)); | ||||
| 	doc.put(DOC_CODAGVIS, v.get(CFV_CODAG1)); | ||||
| 	doc.put(DOC_CODSPMEZZO, v.get(CFV_CODSPMEZZO)); | ||||
| 	doc.put(DOC_CODPORTO, v.get(CFV_CODPORTO)); | ||||
| 	doc.put(DOC_CODNOTESP1, v.get(CFV_CODNOTESP1)); | ||||
| 	doc.put(DOC_CODNOTESP2, v.get(CFV_CODNOTESP2)); | ||||
| 	doc.put(DOC_CODNOTE, v.get(CFV_CODNOTE)); | ||||
| 	doc.put(DOC_CODVETT1, v.get(CFV_CODVETT1)); | ||||
| 	doc.put(DOC_CODVETT2, v.get(CFV_CODVETT2)); | ||||
| 	doc.put(DOC_CODVETT3, v.get(CFV_CODVETT3)); | ||||
| 	doc.put(DOC_PERCSPINC, v.get(CFV_PERCSPINC));	 | ||||
| 	doc.put(DOC_ADDBOLLI, v.get(CFV_ADDBOLLI)); | ||||
| 	doc.put(DOC_CATVEN, v.get(CFV_CATVEN)); | ||||
| 	doc.put(DOC_LIQDIFF, get_int(CLI_ALLEG) == 7 && v.get_bool(CFV_FATTSOSP) ? "X" : ""); | ||||
| } | ||||
| 
 | ||||
| 		 | ||||
| TCli_for::TCli_for(char tipo, long codice) : TMultiple_rectype( LF_CLIFO ), _ven_rec(LF_CFVEN), | ||||
| 																						 _letint(LF_LETINT), _use_lettere(false), _lettera_found(false) | ||||
| { | ||||
|  | ||||
| @ -21,6 +21,8 @@ | ||||
| #include <occas.h> | ||||
| #endif | ||||
| 
 | ||||
| class TDocumento; | ||||
| 
 | ||||
| class TOccasionale : public TRectype | ||||
| {                                       | ||||
| public:  | ||||
| @ -67,6 +69,7 @@ public: | ||||
|   virtual int read(const TRectype& rec, word op = _isequal, word lockop = _nolock); | ||||
|   int read(char tipo, long codice, word op = _isequal, word lockop = _nolock); | ||||
|   virtual int remove(TBaseisamfile& f) const; | ||||
| 	void cli2doc(TDocumento & doc); | ||||
| 
 | ||||
|   TCli_for(char tipo = ' ', long codice = 0L); | ||||
|   TCli_for(const TRectype & rec); | ||||
|  | ||||
| @ -868,6 +868,8 @@ public: | ||||
| 	const TString & codesiva() const; | ||||
| 	void get_protocolli_esenzione(TString & esenzione, TString & data_esenzione, | ||||
| 																TString & registrazione, TString & data_registrazione) const; | ||||
| 
 | ||||
| 	void cli2doc() { clifor().cli2doc(*this); } | ||||
| 	TDocumento (); | ||||
| 	TDocumento (const TDocumento & d); | ||||
| 	TDocumento(char provv, int anno, const char* codnum, long numdoc); | ||||
|  | ||||
							
								
								
									
										10
									
								
								ve/velib04.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								ve/velib04.h
									
									
									
									
									
								
							| @ -428,8 +428,11 @@ protected: | ||||
|   error_type   compile_head_mov(TDocumento&); | ||||
|   // Compila la testata del movimento per le fatture da emettere / ricevere;
 | ||||
|   error_type   compile_head_mov_re(TDocumento&); | ||||
| 	bool spalma_spese() const { return get("I2") == "X"; } | ||||
| 	// Funzione per distribuire le spese
 | ||||
| 	void split_sp_amount(const real & amount, int decimals); | ||||
| 	// Funzione per ricercare il conto di costo/ricavo
 | ||||
|   error_type   search_costo_ricavo(TBill&, const TRiga_documento&); | ||||
|   error_type   search_costo_ricavo(TBill& conto, const TRiga_documento& r, real & amount_to_split, const real & valore); | ||||
|   // Funzione per ricercare il conto di costo/ricavo materiali
 | ||||
|   error_type   search_costo_ricavo_mat(TBill&, const TRiga_documento&); | ||||
|   // Funzione per aggiungere la riga iva al TAssoc_array _righe_iva
 | ||||
| @ -613,7 +616,9 @@ class TContabilizzazione_analitica : public TElaborazione  // velib04f | ||||
| 
 | ||||
| protected: | ||||
|   bool find_conti_iva_indetraibile(const TRiga_documento& riga, const TBill & bill, TString_array& conti, int annoes, const char tipomov, bool & pareggio); | ||||
|   bool find_conti(const TRiga_documento& riga, TString_array& conti, int annoes, bool riclassifica_fdr_fde, const char tipomov, bool & pareggio); | ||||
| 	bool spalma_spese() const { return get("I2") == "X"; } | ||||
| 	void split_sp_amount(TAnal_mov & mov, char  sezione, bool pareggio, const real & amount, const real & no_ca_amount, int decimals); | ||||
|   bool find_conti(const TRiga_documento& riga, TString_array& conti, int annoes, bool riclassifica_fdr_fde, const char tipomov, real & amount_to_split, real & no_ca_amount,  const real & valore, bool & pareggio); | ||||
| 	void init(); | ||||
| 
 | ||||
|   virtual const TCausale& doc2caus(const TDocumento& doc); | ||||
| @ -632,6 +637,7 @@ public: | ||||
| 
 | ||||
|   TContabilizzazione_analitica(const char* cod = NULL); | ||||
|   TContabilizzazione_analitica(const TRectype& rec); | ||||
|   TContabilizzazione_analitica(const TContabilizzazione & el); | ||||
|   virtual ~TContabilizzazione_analitica(); | ||||
| }; | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										114
									
								
								ve/velib04b.cpp
									
									
									
									
									
								
							
							
						
						
									
										114
									
								
								ve/velib04b.cpp
									
									
									
									
									
								
							| @ -1597,7 +1597,7 @@ error_type TContabilizzazione::compile_head_mov_re(TDocumento& doc) | ||||
|   return _error; | ||||
| } | ||||
| 
 | ||||
| error_type TContabilizzazione::search_costo_ricavo(TBill& conto, const TRiga_documento& r) | ||||
| error_type TContabilizzazione::search_costo_ricavo(TBill& conto, const TRiga_documento& r, real & amount_to_split, const real & valore) | ||||
| { | ||||
|   const int items = _search_seq->items(); | ||||
|   TLocalisamfile & cli_file = _clifo->lfile(); // YES, arriva qui dentro quando la relazione e' gia' posizionata
 | ||||
| @ -1770,6 +1770,11 @@ error_type TContabilizzazione::search_costo_ricavo(TBill& conto, const TRiga_doc | ||||
| 					 | ||||
| 					if (!conto.ok() && t == RIGA_SPESEDOC && !__searching) | ||||
| 					{ | ||||
| 						if (spalma_spese()) | ||||
| 						{ | ||||
| 							amount_to_split += valore; | ||||
| 							return _error; | ||||
| 						} | ||||
| 						const int rows = r.doc().physical_rows(); | ||||
| 						int row = -1; | ||||
| 
 | ||||
| @ -1783,7 +1788,7 @@ error_type TContabilizzazione::search_costo_ricavo(TBill& conto, const TRiga_doc | ||||
| 						if (row > 0) | ||||
| 						{ | ||||
| 							__searching = true; | ||||
| 							search_costo_ricavo(conto, r.doc()[row]); | ||||
| 							search_costo_ricavo(conto, r.doc()[row], amount_to_split, valore); | ||||
| 							__searching = false; | ||||
| 						} | ||||
| 					} | ||||
| @ -2228,12 +2233,39 @@ bool TContabilizzazione::valid_row_type(const char* rt) const | ||||
|   return !tri.empty(); | ||||
| } | ||||
| 
 | ||||
| void TContabilizzazione::split_sp_amount(const real & amount, int decimals) | ||||
| { | ||||
| 	TGeneric_distrib d(amount, decimals); | ||||
| 
 | ||||
| 	FOR_EACH_ASSOC_OBJECT((*_righe_iva), obj, key, itm) | ||||
| 	{ | ||||
| 		TRectype & r = (TRectype &)*itm; | ||||
| 
 | ||||
| 		const real imp = r.get_real(RMI_IMPONIBILE); | ||||
| 		d.add(imp); | ||||
| 	} | ||||
| 	FOR_EACH_ASSOC_OBJECT((*_righe_iva), obj1, key1, itm1) | ||||
| 	{ | ||||
| 		TRectype & r = (TRectype &)*itm1; | ||||
| 	 | ||||
| 		real imp = r.get_real(RMI_IMPONIBILE); | ||||
| 		const TCodiceIVA i(r.get(RMI_CODIVA));           | ||||
| 
 | ||||
| 		imp += d.get(); | ||||
| 		r.put(RMI_IMPONIBILE, imp); | ||||
| 		real const imposta = i.imposta(imp); | ||||
| 		r.put(RMI_IMPOSTA, imposta); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| error_type TContabilizzazione::compile_rows_mov(TDocumento& doc) | ||||
| // Compila le righe
 | ||||
| { | ||||
|   TString4 tiporiga, codiva1, codiva2; | ||||
|   const int rows = doc.rows(); | ||||
|   const int ndec = doc.decimals(); | ||||
| 	real amount_to_split; | ||||
| 
 | ||||
| 
 | ||||
|   const bool fat_com = doc.tipo().fattura_commerciale(); | ||||
| 
 | ||||
| @ -2280,7 +2312,7 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc) | ||||
| 				{ | ||||
| 	        if (!riga_omaggio && r.imponibile().is_zero()) | ||||
| 	          continue; | ||||
| 					search_costo_ricavo(conto,r); // l'errore eventuale viene settato qui dentro
 | ||||
| 					search_costo_ricavo(conto, r, amount_to_split, r.imponibile()); // l'errore eventuale viene settato qui dentro
 | ||||
| 
 | ||||
| 					if (good()) | ||||
| 					{ | ||||
| @ -2330,6 +2362,7 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc) | ||||
|             r.put(RDOC_CODIVA, codiva2);  //Restore
 | ||||
|           } | ||||
|           else | ||||
| 					{ | ||||
| 						if (ritenuta) | ||||
| 						{ | ||||
| 							TCurrency_documento c(r.ritenuta(tipo_rit)); | ||||
| @ -2355,7 +2388,6 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc) | ||||
| 							} | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							if (riga_omaggio) | ||||
| 							{ | ||||
| 								_error = _righe_iva->add_omaggi(r, conto); | ||||
| @ -2363,40 +2395,39 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc) | ||||
| 									_nrow = i; | ||||
| 							} | ||||
| 						    else | ||||
| 							{ | ||||
| 								if (contomat.ok() && contomat != conto && pricemat != 0) | ||||
| 								{ | ||||
| 									TRiga_documento rlav(r); | ||||
| 									TRiga_documento rmat(r); | ||||
| 									const real prezzo = r.get_real(RDOC_PREZZO); | ||||
| 									rmat.put(RDOC_PREZZO, pricemat); | ||||
| 									rmat.zero(RDOC_SCONTO); | ||||
| 									const real valmat = rmat.imponibile(); | ||||
| 									const real diff = r.imponibile() - valmat; | ||||
| 									if (contomat.ok() && contomat != conto && pricemat != 0) | ||||
| 									{ | ||||
| 										TRiga_documento rlav(r); | ||||
| 										TRiga_documento rmat(r); | ||||
| 										const real prezzo = r.get_real(RDOC_PREZZO); | ||||
| 										rmat.put(RDOC_PREZZO, pricemat); | ||||
| 										rmat.zero(RDOC_SCONTO); | ||||
| 										const real valmat = rmat.imponibile(); | ||||
| 										const real diff = r.imponibile() - valmat; | ||||
| 
 | ||||
| 									rlav.put(RDOC_PREZZO, diff); | ||||
| 									rlav.put(RDOC_QTA, 1); | ||||
| 									rlav.zero(RDOC_SCONTO); | ||||
| 									rmat.put(RDOC_PREZZO, valmat); | ||||
| 									rmat.put(RDOC_QTA, 1); | ||||
| 									rmat.zero(RDOC_SCONTO); | ||||
| 									_righe_iva->add(rlav, conto); | ||||
| 									_righe_iva->add(rmat, contomat); | ||||
| 								} | ||||
| 								else  | ||||
| 									_righe_iva->add(r, conto); | ||||
| 							} | ||||
| 										rlav.put(RDOC_PREZZO, diff); | ||||
| 										rlav.put(RDOC_QTA, 1); | ||||
| 										rlav.zero(RDOC_SCONTO); | ||||
| 										rmat.put(RDOC_PREZZO, valmat); | ||||
| 										rmat.put(RDOC_QTA, 1); | ||||
| 										rmat.zero(RDOC_SCONTO); | ||||
| 										_righe_iva->add(rlav, conto); | ||||
| 										_righe_iva->add(rmat, contomat); | ||||
| 									} | ||||
| 									else  | ||||
| 										if (conto.ok()) | ||||
| 										_righe_iva->add(r, conto); | ||||
| 
 | ||||
| 							if (r.doc().tipo().calcolo_lordo()) // Si ricorda che calcolo_lordo() e fattura_commerciale() sono esclusivi.
 | ||||
| 							{ | ||||
|   							// Totalizza per ogni codice iva il lordo
 | ||||
| 								const TString& cod = r.get(RDOC_CODIVA); | ||||
| 								if (!_totali_lordi.is_key(cod)) | ||||
| 									_totali_lordi.add(cod, new real); | ||||
| 								real& rl = (real&) _totali_lordi[cod]; | ||||
| 								rl += r.imponibile(true); | ||||
| 							} | ||||
| 						if (!ritenuta && r.doc().tipo().calcolo_lordo()) // Si ricorda che calcolo_lordo() e fattura_commerciale() sono esclusivi.
 | ||||
| 						{ | ||||
| 							// Totalizza per ogni codice iva il lordo
 | ||||
| 							const TString& cod = r.get(RDOC_CODIVA); | ||||
| 							if (!_totali_lordi.is_key(cod)) | ||||
| 								_totali_lordi.add(cod, new real); | ||||
| 							real& rl = (real&) _totali_lordi[cod]; | ||||
| 							rl += r.imponibile(true); | ||||
| 						} | ||||
| 					} | ||||
|         } | ||||
|       } | ||||
|     } | ||||
| @ -2408,6 +2439,9 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc) | ||||
| 
 | ||||
|   } | ||||
|    | ||||
| 	if (amount_to_split != ZERO) | ||||
| 		split_sp_amount(amount_to_split, ndec); | ||||
|    | ||||
|   if (good() && _righe_iva->empty()) | ||||
|     _error = no_rows_error; | ||||
|    | ||||
| @ -2501,6 +2535,7 @@ error_type TContabilizzazione::compile_rows_mov_re(TDocumento& doc) | ||||
| {              | ||||
|   const int rows = doc.rows(); | ||||
|   const int ndec = doc.decimals(); | ||||
| 		real amount_to_split; | ||||
| 
 | ||||
|   _righe_iva->destroy();   // resetta l'assoc_array delle righe di iva  
 | ||||
|   for (int i=1; good() && i<=rows; i++) // browse all this fucked document rows
 | ||||
| @ -2512,10 +2547,12 @@ error_type TContabilizzazione::compile_rows_mov_re(TDocumento& doc) | ||||
|       const char tipo = r.tipo().tipo(); | ||||
|       // Le righe omaggio senza addebito IVA vanno saltate
 | ||||
|       const bool riga_omaggio = tipo == RIGA_OMAGGI && r.get_bool(RDOC_ADDIVA); | ||||
| 			const bool spesa = r.tipo().tipo() == RIGA_SPESEDOC; | ||||
| 
 | ||||
|       if ((tipo != RIGA_DESCRIZIONI && tipo != RIGA_SCONTI && tipo != RIGA_RETTIFICHE) && !riga_omaggio) | ||||
|       { | ||||
|         TBill conto; | ||||
|         search_costo_ricavo(conto,r); // l'errore eventuale viene settato qui dentro
 | ||||
|         search_costo_ricavo(conto, r, amount_to_split, r.imponibile()); // l'errore eventuale viene settato qui dentro
 | ||||
|         if (good()) | ||||
|           _righe_iva->add(r, conto); | ||||
|       } | ||||
| @ -2527,6 +2564,7 @@ error_type TContabilizzazione::compile_rows_mov_re(TDocumento& doc) | ||||
| 		} | ||||
| 
 | ||||
|   } | ||||
| 	split_sp_amount(amount_to_split, ndec); | ||||
|                  | ||||
|   if (good() && _righe_iva->items() == 0) | ||||
|     _error = no_rows_error; | ||||
| @ -3692,7 +3730,7 @@ error_type TContabilizzazione::write_anal(TDocumento& doc, const TMovimentoPN& m | ||||
|   } | ||||
|   if (has_anal_bill)  | ||||
|   { | ||||
|     TContabilizzazione_analitica canal; | ||||
|     TContabilizzazione_analitica canal(*this); | ||||
|     const long numreg_cg = movimento.curr().get_long(MOV_NUMREG); | ||||
| 		TAnal_mov mov; | ||||
|     canal.elabora(doc, numreg_cg, _viswin, _can_write, mov); | ||||
| @ -4407,4 +4445,4 @@ bool TContabilizzazione::call_exe(const TDocumento& doc, const TMovimentoPN& mov | ||||
|     ::remove(ininame); | ||||
|    | ||||
|   return ok; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -263,9 +263,11 @@ bool TContabilizzazione_analitica::search_costo_ricavo(const TRiga_documento& r, | ||||
|       } | ||||
| 
 | ||||
| 			static int __searching = false; | ||||
| 			 | ||||
| 			if (!conto.ok() && t == RIGA_SPESEDOC && !__searching) | ||||
| 			{ | ||||
| 				if (spalma_spese()) | ||||
| 					return true; | ||||
| 
 | ||||
| 				const int rows = r.doc().physical_rows(); | ||||
| 				int row = -1; | ||||
| 
 | ||||
| @ -367,7 +369,7 @@ bool TContabilizzazione_analitica::find_conti_iva_indetraibile(const TRiga_docum | ||||
|   return !conti.empty(); | ||||
| } | ||||
| 
 | ||||
| bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TString_array& conti, int annoes, bool riclassifica_fdr_fde, const char tipomov, bool & pareggio) | ||||
| bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TString_array& conti, int annoes, bool riclassifica_fdr_fde, const char tipomov, real & amount_to_split, real & no_ca_amount, const real & valore, bool & pareggio) | ||||
| { | ||||
|   bool bArcticleFound = false; | ||||
| 
 | ||||
| @ -392,8 +394,11 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri | ||||
| 	{ | ||||
| 		if (!search_costo_ricavo(riga, bill, riclassifica_fdr_fde)) | ||||
| 			return true; | ||||
| 		if (!bill.is_analitico()) | ||||
| 		if (!bill.is_analitico() && !_usepdcc && !riga.is_spese()) | ||||
| 		{ | ||||
| 			no_ca_amount += valore; | ||||
| 			return true; | ||||
| 		} | ||||
| 
 | ||||
| 		if (riga.is_articolo()) | ||||
| 		{ | ||||
| @ -406,8 +411,8 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			if (riga.is_spese() || riga.is_prestazione() || | ||||
| 					riga.is_risorsa() || riga.is_attrezzatura()) | ||||
| 				if (riga.is_spese() || riga.is_prestazione() || | ||||
| 						riga.is_risorsa() || riga.is_attrezzatura()) | ||||
| 			{ | ||||
| 				const char tipo = riga.tipo().tipo(); | ||||
| 				const TSpesa_prest spp(riga.get(RDOC_CODART), tipo); | ||||
| @ -417,6 +422,12 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri | ||||
| 					contanal.format("%03d%03d%06ld", bill.gruppo(), bill.conto(), bill.sottoconto()); | ||||
| 				else | ||||
| 					contanal = tipocf == 'F' ?  spp.conto_analitico_acquisti() : spp.conto_analitico_vendite() ; | ||||
| 
 | ||||
| 				TFilename pname; | ||||
| 				 | ||||
| 				if (ini_get_bool(riga.doc().tipo().profile_name(pname), "MAIN", "DistribuzioneSpese", true) && | ||||
| 						riga.is_spese() && (contanal.blank() || atoi(contanal))) | ||||
| 					amount_to_split += valore; | ||||
| 			} | ||||
| 		} | ||||
| 		if (!bArcticleFound)  // Se l'anagrafica non esiste va bene cosi'
 | ||||
| @ -438,28 +449,32 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri | ||||
|     conto.add(100, 4); | ||||
|     conti.add(conto); | ||||
|   } | ||||
| 	const TAnal_ripartizioni_batch & rip = _rip.righe(bill, annoes, tipomov); | ||||
| 	 | ||||
| 	pareggio = rip.rows() > 0; | ||||
| 	for (int i = 1; i <= rip.rows(); i++) | ||||
| 	if (bill.ok()) | ||||
| 	{ | ||||
| 		const TRectype& rigarip = rip.row(i); | ||||
| 		const TAnal_ripartizioni_batch & rip = _rip.righe(bill, annoes, tipomov); | ||||
| 	 | ||||
| 		pareggio = rip.rows() > 0; | ||||
| 		for (int i = 1; i <= rip.rows(); i++) | ||||
| 		{ | ||||
| 			const TRectype& rigarip = rip.row(i); | ||||
| 
 | ||||
| 		conto = rigarip.get(RRIP_CODCONTO); | ||||
| 			conto = rigarip.get(RRIP_CODCONTO); | ||||
| 
 | ||||
| 		const TString  costo = rigarip.get(RRIP_CODCOSTO); | ||||
| 			const TString  costo = rigarip.get(RRIP_CODCOSTO); | ||||
| 
 | ||||
| 		conto.add(costo.full() ? costo : riga_cos, 1); | ||||
| 			conto.add(costo.full() ? costo : riga_cos, 1); | ||||
| 
 | ||||
| 		const TString & commessa = rigarip.get(RRIP_CODCMS); | ||||
| 			const TString & commessa = rigarip.get(RRIP_CODCMS); | ||||
| 
 | ||||
| 		conto.add(commessa.full() ? commessa : riga_cms, 2); | ||||
| 			conto.add(commessa.full() ? commessa : riga_cms, 2); | ||||
| 
 | ||||
| 		const TString & fase = rigarip.get(RRIP_CODFASE); | ||||
| 			const TString & fase = rigarip.get(RRIP_CODFASE); | ||||
| 
 | ||||
| 		conto.add(fase.full() ? fase: riga_fsc, 3); | ||||
| 		conto.add(rigarip.get(RRIP_RIPARTO), 4); | ||||
| 		conti.add(conto); | ||||
| 			conto.add(fase.full() ? fase: riga_fsc, 3); | ||||
| 			conto.add(rigarip.get(RRIP_RIPARTO), 4); | ||||
| 			conti.add(conto); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|   return !conti.empty(); | ||||
| @ -492,6 +507,37 @@ void TContabilizzazione_analitica::calcola_date_comp(const TDocumento& doc, TDat | ||||
|   annoes = esercizi().date2esc(datacomp);    //ci potrebbe andare datacomp? All'analisi l'ardua sentenza
 | ||||
| } | ||||
| 
 | ||||
| void TContabilizzazione_analitica::split_sp_amount(TAnal_mov & mov, char  sezione, bool pareggio, const real & amount, const real & no_ca_amount, int decimals) | ||||
| { | ||||
| 	TGeneric_distrib w(amount, decimals); | ||||
| 
 | ||||
| 	w.add(mov.get_real(MOVANA_TOTDOC)); | ||||
| 	w.add(no_ca_amount); | ||||
| 	const real ca_amount = w.get(); | ||||
| 
 | ||||
| 	TGeneric_distrib d(ca_amount, decimals); | ||||
| 	const int rows = mov.rows(); | ||||
| 
 | ||||
| 	for (int i = pareggio ? 2 : 1; i <= rows; i++) | ||||
| 	{ | ||||
| 		TRectype& r = mov.body()[i]; | ||||
| 		TImporto imp(r.get_char(RMOVANA_SEZIONE), r.get_real(RMOVANA_IMPORTO)); | ||||
| 
 | ||||
| 		imp.normalize(sezione); | ||||
| 		d.add(imp.valore()); | ||||
| 	} | ||||
| 	for (int i = pareggio ? 2 : 1; i <= rows; i++) | ||||
| 	{ | ||||
| 		TRectype& r = mov.body()[i]; | ||||
| 		TImporto imp(r.get_char(RMOVANA_SEZIONE), r.get_real(RMOVANA_IMPORTO)); | ||||
| 
 | ||||
| 		imp += TImporto(imp.sezione(), d.get()); | ||||
| 		imp.normalize(); | ||||
| 		r.put(RMOVANA_IMPORTO, imp.valore()); | ||||
| 		r.put(RMOVANA_SEZIONE, imp.sezione()); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TViswin* viswin, bool can_write, TAnal_mov& mov, bool riclassifica_fdr_fde) | ||||
| { | ||||
|   TDate datareg, datacomp, datafcomp; | ||||
| @ -579,6 +625,9 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis | ||||
| 	const TipoIVA tiva = caus.iva(); | ||||
| 	const bool vendita = tiva == iva_vendite; | ||||
| 	TBill bill; caus.bill(RIGA_IVA_NON_DETRAIBILE, bill);  | ||||
| 	bool has_pareggio = false; | ||||
| 	real amount_to_split; | ||||
| 	real no_ca_amount; | ||||
| 
 | ||||
|  // Scandisco le righe del documento,
 | ||||
|   const int righe_doc = doc.physical_rows();  //ignora sconti ed esenzioni (sennò sarebbe doc.rows()
 | ||||
| @ -652,7 +701,7 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis | ||||
| 
 | ||||
|     TString_array conti; | ||||
|     const char tipomov = mov.get_char(MOVANA_TIPOMOV); | ||||
|     const bool ok = find_conti(riga, conti, annoes, riclassifica_fdr_fde, tipomov, pareggio); | ||||
| 		const bool ok = find_conti(riga, conti, annoes, riclassifica_fdr_fde, tipomov, amount_to_split, no_ca_amount, valore, pareggio); | ||||
|     if (!ok) | ||||
|     { | ||||
|       if (viswin != NULL) | ||||
| @ -690,6 +739,7 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis | ||||
|       rmov.put(RMOVANA_IMPORTO, imp.valore()); | ||||
|       totdoc += imp; | ||||
|     } | ||||
| 		has_pareggio |= pareggio; | ||||
|   } | ||||
| 
 | ||||
| 	if (_usepdcc) | ||||
| @ -746,6 +796,9 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if (amount_to_split != ZERO) | ||||
| 		split_sp_amount(mov, sezione, has_pareggio, amount_to_split, no_ca_amount, doc.decimals()); | ||||
| 
 | ||||
|   if (can_write && mov.rows() > 0) | ||||
|   { | ||||
|     totdoc.normalize(); | ||||
| @ -894,6 +947,13 @@ TContabilizzazione_analitica::TContabilizzazione_analitica(const TRectype& rec) | ||||
| 	init(); | ||||
| } | ||||
| 
 | ||||
| TContabilizzazione_analitica::TContabilizzazione_analitica(const TContabilizzazione & el) | ||||
|                             : TElaborazione(el), _error(no_error), _caus(NULL) | ||||
| { | ||||
| 	put("I0", 7); | ||||
| 	init(); | ||||
| } | ||||
| 
 | ||||
| TContabilizzazione_analitica::~TContabilizzazione_analitica()  | ||||
| {  | ||||
|   if (_caus != NULL) | ||||
|  | ||||
| @ -82,6 +82,7 @@ | ||||
| #define F_USA_DOCRIF            331 | ||||
| #define F_RIF_DOCIN             332 | ||||
| #define F_COMMESSA              333 | ||||
| #define F_SPALMA								334 | ||||
| 
 | ||||
| #define F_PREZZO_DA_ORDINE      340 | ||||
| #define F_AGGIORNA_PREZZO				341 | ||||
|  | ||||
| @ -741,9 +741,18 @@ BEGIN | ||||
|   FIELD B8 | ||||
| END | ||||
| 
 | ||||
| LISTBOX F_SPALMA 1 12 | ||||
| BEGIN | ||||
|   PROMPT 2 17 "Spalma le spese" | ||||
|   ITEM " |Non spalmare" | ||||
|   ITEM "X|Spalma" | ||||
|   FIELD I2 | ||||
|   GROUP 3 9 | ||||
| END | ||||
| 
 | ||||
| STRING F_RIF_DOCIN 4 | ||||
| BEGIN | ||||
|   PROMPT 2 17 "Numerazione documenti in entrata " | ||||
|   PROMPT 40 17 "Numerazione documenti in entrata" | ||||
| 	USE %NUM | ||||
|   INPUT CODTAB F_RIF_DOCIN | ||||
|   DISPLAY "Codice" CODTAB | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user