Patch level :2.2 nopatch
Files correlati : Ricompilazione Demo : [ ] Commento :stampa pagato analitica in corso d'opera (un casino pauroso!) git-svn-id: svn://10.65.10.50/trunk@13585 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									0bd4accb45
								
							
						
					
					
						commit
						3e93550834
					
				
							
								
								
									
										293
									
								
								ca/ca3600.cpp
									
									
									
									
									
								
							
							
						
						
									
										293
									
								
								ca/ca3600.cpp
									
									
									
									
									
								
							@ -13,7 +13,6 @@
 | 
				
			|||||||
#include "..\cg\cg2103.h"
 | 
					#include "..\cg\cg2103.h"
 | 
				
			||||||
#include "..\ve\velib.h"
 | 
					#include "..\ve\velib.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "panapdc.h"
 | 
					 | 
				
			||||||
#include "pconana.h"
 | 
					#include "pconana.h"
 | 
				
			||||||
#include "movana.h"
 | 
					#include "movana.h"
 | 
				
			||||||
#include "rmovana.h"
 | 
					#include "rmovana.h"
 | 
				
			||||||
@ -105,7 +104,7 @@ bool TPag_per_cms_mask::on_field_event(TOperable_field& o, TField_event e, long
 | 
				
			|||||||
			if (e == fe_button)
 | 
								if (e == fe_button)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				config_setter(sfield(F_PDCC), "Pdcc");
 | 
									config_setter(sfield(F_PDCC), "Pdcc");
 | 
				
			||||||
				config_setter(sfield(F_PDCA), "Pdca");
 | 
					//				config_setter(sfield(F_PDCA), "Pdca");	***per ora solo Pdcc***
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
    default: 
 | 
					    default: 
 | 
				
			||||||
@ -121,9 +120,9 @@ TPag_per_cms_mask::TPag_per_cms_mask()
 | 
				
			|||||||
	// creazione dei campi della pagina della maschera con lo sheet di cdc/cms/fasi
 | 
						// creazione dei campi della pagina della maschera con lo sheet di cdc/cms/fasi
 | 
				
			||||||
	create_sheet(F_RIGHE);
 | 
						create_sheet(F_RIGHE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//Seconda pagina (sheets dei conti)
 | 
						//Seconda pagina (sheets dei conti)	***per ora solo Pdcc***
 | 
				
			||||||
	//Controllo sul tipo di piano dei conti da utilizzare (Analitico/Contabile)
 | 
						//Controllo sul tipo di piano dei conti da utilizzare (Analitico/Contabile)
 | 
				
			||||||
	TConfig& cfg = ca_config();
 | 
					/*	TConfig& cfg = ca_config();
 | 
				
			||||||
	const bool use_pdcc = cfg.get_bool("UsePdcc");
 | 
						const bool use_pdcc = cfg.get_bool("UsePdcc");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  set(F_PIANO, use_pdcc ? "Contabile" : "Analitico");
 | 
					  set(F_PIANO, use_pdcc ? "Contabile" : "Analitico");
 | 
				
			||||||
@ -145,8 +144,9 @@ TPag_per_cms_mask::TPag_per_cms_mask()
 | 
				
			|||||||
		sfield(F_PDCA).sheet_mask().hide(-1);
 | 
							sfield(F_PDCA).sheet_mask().hide(-1);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		config_loader(sfield(F_PDCA), "Pdca");
 | 
							config_loader(sfield(F_PDCA), "Pdca");
 | 
				
			||||||
	}
 | 
						}*/
 | 
				
			||||||
 | 
						//carica i parametri dei conti per lo sheet dei conti contabili
 | 
				
			||||||
 | 
						config_loader(sfield(F_PDCC), "Pdcc");
 | 
				
			||||||
	// setta gli handlers a tutti i campi generati della maschera;senza questa chiamata la on_field_event
 | 
						// setta gli handlers a tutti i campi generati della maschera;senza questa chiamata la on_field_event
 | 
				
			||||||
	// non puo' funzionare sui campi generati!!!
 | 
						// non puo' funzionare sui campi generati!!!
 | 
				
			||||||
	set_handlers();
 | 
						set_handlers();
 | 
				
			||||||
@ -200,6 +200,8 @@ protected:
 | 
				
			|||||||
	long _codfor;
 | 
						long _codfor;
 | 
				
			||||||
	TString8 _campodata;
 | 
						TString8 _campodata;
 | 
				
			||||||
  TString _codcosto, _codcms, _codfas;
 | 
					  TString _codcosto, _codcms, _codfas;
 | 
				
			||||||
 | 
						TAssoc_array _costi,_pagamenti,_fiscali,_sociali; //array che contengono i conti letti dal .ini
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
protected:	//da libreria
 | 
					protected:	//da libreria
 | 
				
			||||||
//	virtual const TVariant& get(const char* column_name) const;
 | 
					//	virtual const TVariant& get(const char* column_name) const;
 | 
				
			||||||
@ -210,6 +212,12 @@ protected:
 | 
				
			|||||||
  static bool mov_callback(const TRelation& rel, void* pJolly);
 | 
					  static bool mov_callback(const TRelation& rel, void* pJolly);
 | 
				
			||||||
	long find_movimento(const TRectype& riga_pag) const;
 | 
						long find_movimento(const TRectype& riga_pag) const;
 | 
				
			||||||
	void find_commesse(const long nreg, const TRectype& riga_pag);
 | 
						void find_commesse(const long nreg, const TRectype& riga_pag);
 | 
				
			||||||
 | 
						bool check_cms_cdc_fsc(const TRectype& rec_analriga);
 | 
				
			||||||
 | 
						void lettura_conti(TAssoc_array& assoc, const char tipoconto);
 | 
				
			||||||
 | 
						int cerca_riga_fattura_origine(const TPartita& match, const TRectype& riga_pag);
 | 
				
			||||||
 | 
						real totale_documento(const TRectype& mov) const;
 | 
				
			||||||
 | 
						real calcola_pagato_prec(const TPartita& match, const int riga_fatt, const TRectype& riga_pag);
 | 
				
			||||||
 | 
					  bool test_swap(TCausale& caus, bool ritsoc) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  virtual void set_filter(const TPag_per_cms_mask& msk, const int cms_row, const long codfor);
 | 
					  virtual void set_filter(const TPag_per_cms_mask& msk, const int cms_row, const long codfor);
 | 
				
			||||||
@ -278,6 +286,100 @@ void TPag_per_cms_recordset::crea_trr(const TFilename& trr) const
 | 
				
			|||||||
	of << "CONTO+NREG+DATAPAG" << endl;
 | 
						of << "CONTO+NREG+DATAPAG" << endl;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TPag_per_cms_recordset::lettura_conti(TAssoc_array& assoc, const char tipoconto)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  TConfig conti("ca3600.ini","Pdcc"); //paragrafo da scandire nell'ini (solo conti contabili!!)
 | 
				
			||||||
 | 
					  TAssoc_array& vars = conti.list_variables();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  FOR_EACH_ASSOC_STRING(vars, h, k, val)  //riempie l'assoc con i soli valori del paragrafo dell'ini
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (*val == tipoconto)	//mette nell'assocarray solo i conti corrispondenti al tipoconto passato
 | 
				
			||||||
 | 
								assoc.add(val);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Controlla sulla causale se il segno del totale documento (ritsoc=FALSE) 
 | 
				
			||||||
 | 
					// o quello delle ritenute sociali (ritsoc=TRUE) e' invertito rispetto al normale
 | 
				
			||||||
 | 
					bool TPag_per_cms_recordset::test_swap(TCausale& caus, bool ritsoc) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  const char sez = ritsoc ? caus.sezione_ritsoc() : caus.sezione_clifo();
 | 
				
			||||||
 | 
					  const bool s = (caus.iva() == iva_vendite) ^ (sez == 'D');
 | 
				
			||||||
 | 
					  return s;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Calcola il totale del documento tenendo conto del segno della prima riga e di quella delle
 | 
				
			||||||
 | 
					// ritenute sociali sulla causale                        
 | 
				
			||||||
 | 
					real TPag_per_cms_recordset::totale_documento(const TRectype& mov) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  real tot = mov.get_real(MOV_TOTDOC);              // Legge totale
 | 
				
			||||||
 | 
					  const real ritfis = mov.get_real(MOV_RITFIS);
 | 
				
			||||||
 | 
					  tot += ritfis;                          // Somma ritenute fiscali
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  const real ritsoc = mov.get_real(MOV_RITSOC);           
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (!ritsoc.is_zero())
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    TCausale caus(mov.get(MOV_CODCAUS));
 | 
				
			||||||
 | 
					    const bool swapt = test_swap(caus, false);    // Totale invertito ?
 | 
				
			||||||
 | 
					    const bool swaps = test_swap(caus, true);     // Ritenute sociali invertite ?
 | 
				
			||||||
 | 
					    if (swapt ^ swaps)                      // Somma ritenute sociali con segno
 | 
				
			||||||
 | 
					      tot -= ritsoc;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      tot += ritsoc;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return tot;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int TPag_per_cms_recordset::cerca_riga_fattura_origine(const TPartita& match, const TRectype& riga_pag)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  //scansione delle righe partita passata, precedenti alla riga_pag
 | 
				
			||||||
 | 
					  const int k = riga_pag.get_int(PART_NRIGA);
 | 
				
			||||||
 | 
					  for (int i = match.pred(k); i > 0; i = match.pred(i))
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    const TRiga_partite& riga_part = match.riga(i);
 | 
				
			||||||
 | 
					    if (riga_part.is_fattura())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      for (int j = riga_part.rate(); j > 0; j--)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        if (match.esiste(i, j, k)) //se esiste il pagamento k della rata j della riga partita i contenente la fattura
 | 
				
			||||||
 | 
					          return i;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					real TPag_per_cms_recordset::calcola_pagato_prec(const TPartita& match, const int riga_fatt, const TRectype& riga_pag)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  real pagato = ZERO;
 | 
				
			||||||
 | 
					  if (riga_fatt > 0)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    const int k = riga_pag.get_int(PART_NRIGA);
 | 
				
			||||||
 | 
					    const TDate data_rif = riga_pag.get(_campodata);  //data di riferimento selezionata sulla maschera 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const TRiga_partite& riga_part = match.riga(riga_fatt);
 | 
				
			||||||
 | 
					    for (int i = riga_part.rate(); i > 0; i--)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      TRiga_scadenze& sc = riga_part.rata(i);
 | 
				
			||||||
 | 
					      for (int j = sc.last(); j > 0; j = sc.pred(j))
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        const TRiga_partite& pag = match.riga(j);
 | 
				
			||||||
 | 
					        const TDate datapag = pag.get_date(_campodata);
 | 
				
			||||||
 | 
					        const long cmp = datapag - data_rif;
 | 
				
			||||||
 | 
					        //la riga pagamento e' da considerare quando ha data anteriore a quella di riferimento oppur
 | 
				
			||||||
 | 
					        //ha data uguale ma numero di registrazione inferiore (insomma, il pagamento e' precedente
 | 
				
			||||||
 | 
					        //a quello di riga_pag)
 | 
				
			||||||
 | 
					        if (cmp < 0 || (cmp == 0 && j <= k))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          pagato += pag.get_real(PAGSCA_IMPORTO);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return pagato;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
long TPag_per_cms_recordset::find_movimento(const TRectype& riga_pag) const
 | 
					long TPag_per_cms_recordset::find_movimento(const TRectype& riga_pag) const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int n_fatture = 0;  //numero di fatture trovate
 | 
					  int n_fatture = 0;  //numero di fatture trovate
 | 
				
			||||||
@ -376,11 +478,47 @@ void TPag_per_cms_recordset::scan_movs(const TPag_per_cms_mask& msk)
 | 
				
			|||||||
  crea_righe_stampa(_righesociali, 4);*/
 | 
					  crea_righe_stampa(_righesociali, 4);*/
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool TPag_per_cms_recordset::check_cms_cdc_fsc(const TRectype& rec_analriga)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (_codcosto.not_empty() && _codcosto != rec_analriga.get(RMOVANA_CODCCOSTO))
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						if (_codcms.not_empty() && _codcms != rec_analriga.get(RMOVANA_CODCMS))
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						if (_codfas.not_empty() && _codfas != rec_analriga.get(RMOVANA_CODFASE))
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//prepara l'assoc con tutte le righe da mandare in stampa per quanto riguarda i movimenti con
 | 
					//prepara l'assoc con tutte le righe da mandare in stampa per quanto riguarda i movimenti con
 | 
				
			||||||
//saldaconto (siano essi con o senza iva)
 | 
					//saldaconto (siano essi con o senza iva)
 | 
				
			||||||
void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga_pag)
 | 
					void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga_pag)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
/*  TMovimentoPN pn;
 | 
						//cerca un record di MOVANA che abbia numregcg = nreg;usa il nuovo metodo fighissimo..
 | 
				
			||||||
 | 
						//..con la isam query
 | 
				
			||||||
 | 
						TString query, strnreg;
 | 
				
			||||||
 | 
						strnreg.format("%07ld", nreg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						query << "USE MOVANA KEY 3\n";
 | 
				
			||||||
 | 
						query << "WHERE NUMREGCG=";
 | 
				
			||||||
 | 
						query << strnreg;
 | 
				
			||||||
 | 
						query << "\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						TISAM_recordset movana(query);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (TRecnotype i = 0; movana.move_to(i); i++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
							const long numregcg = movana.get(MOVANA_NUMREGCG).as_int();
 | 
				
			||||||
 | 
							//se trova il record cercato in RMOVANA...
 | 
				
			||||||
 | 
							if (numregcg == nreg)
 | 
				
			||||||
 | 
							{	
 | 
				
			||||||
 | 
								//prepara il record tmpcurr sul file temporaneo _tmp su cui registrare i dati da stampare
 | 
				
			||||||
 | 
								TRectype& tmpcurr = _tmp->curr();
 | 
				
			||||||
 | 
								tmpcurr.zero();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								//crea un movimento p.n. con il numero reg che viene passato al metodo (nreg relativo.. 
 | 
				
			||||||
 | 
								//..ad un movimento della fattura originaria) 
 | 
				
			||||||
 | 
							  TMovimentoPN pn;
 | 
				
			||||||
			pn.curr().put(MOV_NUMREG, nreg);
 | 
								pn.curr().put(MOV_NUMREG, nreg);
 | 
				
			||||||
			if (pn.read() == NOERR)
 | 
								if (pn.read() == NOERR)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@ -397,17 +535,97 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
 | 
				
			|||||||
					for (int i = 0; i < pn.iva_items(); i++)
 | 
										for (int i = 0; i < pn.iva_items(); i++)
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						const TRectype& rmoviva = pn.iva(i);
 | 
											const TRectype& rmoviva = pn.iva(i);
 | 
				
			||||||
        const TString& codcms = rmoviva.get(RMI_CODCMS);
 | 
											const TBill zio(rmoviva);
 | 
				
			||||||
        const TString& codfase = rmoviva.get(RMI_FASCMS);
 | 
											//il tutto si fa solo se l'indicatore del conto nella riga iva e' != 5
 | 
				
			||||||
 | 
											if (zio.indicatore_bilancio() != 5)
 | 
				
			||||||
        const TBill conto(rmoviva);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (cms_in_range(codcms, codfase) && conto.indicatore_bilancio() != 5)
 | 
					 | 
				
			||||||
						{
 | 
											{
 | 
				
			||||||
          TToken_string cms_fsc = codcms;
 | 
												const int gruppo_iva = zio.gruppo();
 | 
				
			||||||
          if (codfase.not_empty())
 | 
												const int conto_iva = zio.conto();
 | 
				
			||||||
            cms_fsc.add(codfase);
 | 
												const long sottoconto_iva = zio.sottoconto();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
												//trova le RMOVANA del MOVANA corrente che hanno il conto = a quello della i-esima rigaiva
 | 
				
			||||||
 | 
												TAnal_mov anal_mov(nreg);
 | 
				
			||||||
 | 
												TRecord_array& anal_rows = anal_mov.body();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
												if (anal_rows.rows() > 0)	//se il movana ha righe...
 | 
				
			||||||
 | 
												{
 | 
				
			||||||
 | 
													for (i = 1; i <= anal_rows.rows(); i++)
 | 
				
			||||||
 | 
													{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
														//prende il conto sulla riga analitica e lo confronta con quello della riga iva
 | 
				
			||||||
 | 
														const int gruppo_anal = atoi(anal_rows[i].get(RMOVANA_CODCONTO).left(3)); 
 | 
				
			||||||
 | 
														const int conto_anal = atoi(anal_rows[i].get(RMOVANA_CODCONTO).mid(3,3));
 | 
				
			||||||
 | 
														const long sottoconto_anal = atol(anal_rows[i].get(RMOVANA_CODCONTO).mid(6,6));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
														//il codconto anale e iva coincidono?
 | 
				
			||||||
 | 
														if (gruppo_iva == gruppo_anal && conto_iva == conto_anal && sottoconto_iva == sottoconto_anal)
 | 
				
			||||||
 | 
														{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
															const real imponibile_iva = rmoviva.get_real(RMI_IMPONIBILE);
 | 
				
			||||||
 | 
															real imposta_iva = rmoviva.get_real(RMI_IMPOSTA);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
															//commessa,cdc,fase della riga analitica devono essere coincidenti con quelle dello sheet
 | 
				
			||||||
 | 
															if (check_cms_cdc_fsc(anal_rows[i]))
 | 
				
			||||||
 | 
															{
 | 
				
			||||||
 | 
																//costruzione dell'assoc_array con cms/cdc/fsc ed importi
 | 
				
			||||||
 | 
																TToken_string cms_cdc_fsc;
 | 
				
			||||||
 | 
																cms_cdc_fsc.add(anal_rows[i].get(RMOVANA_CODCMS));
 | 
				
			||||||
 | 
																cms_cdc_fsc.add(anal_rows[i].get(RMOVANA_CODCCOSTO));
 | 
				
			||||||
 | 
																cms_cdc_fsc.add(anal_rows[i].get(RMOVANA_CODFASE));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
																real* imp = (real*)commesse.objptr(cms_cdc_fsc);
 | 
				
			||||||
 | 
																if (imp == NULL)
 | 
				
			||||||
 | 
																{
 | 
				
			||||||
 | 
																	imp = new real;
 | 
				
			||||||
 | 
																	commesse.add(cms_cdc_fsc, imp);
 | 
				
			||||||
 | 
																}
 | 
				
			||||||
 | 
																*imp += imponibile_iva;
 | 
				
			||||||
 | 
																totdoc_cms += imponibile_iva;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
																if (imposta_iva != ZERO)
 | 
				
			||||||
 | 
																{
 | 
				
			||||||
 | 
																	//controllo prorata
 | 
				
			||||||
 | 
																	const TRectype& pla = cache().get(LF_COMMESSE, anal_rows[i].get(RMOVANA_CODCMS));
 | 
				
			||||||
 | 
																	const bool prorata = pla.get_bool("PRORATA");
 | 
				
			||||||
 | 
																	if (prorata)
 | 
				
			||||||
 | 
																	{
 | 
				
			||||||
 | 
																		const TDate datareg = pn.curr().get_date(MOV_DATAREG);
 | 
				
			||||||
 | 
																		const int anno = datareg.year();
 | 
				
			||||||
 | 
																		TRegistro registro(pn.curr().get(MOV_REG), anno);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
																		imposta_iva *= (CENTO - registro.prorata(anno))/CENTO;
 | 
				
			||||||
 | 
																		imposta_iva.round(TCurrency::get_firm_dec()); //ci vanno i decimali della ditta
 | 
				
			||||||
 | 
																	}
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
																	*imp += imposta_iva;
 | 
				
			||||||
 | 
																	totdoc_cms += imposta_iva;
 | 
				
			||||||
 | 
																}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*											TGeneric_distrib agip(imponibile_iva, TCurrency::get_firm_dec());
 | 
				
			||||||
 | 
																FOR_EACH_ASSOC_OBJECT(commesse, h, k, importo)
 | 
				
			||||||
 | 
																{
 | 
				
			||||||
 | 
																	const real& impcms = *(real*)importo;
 | 
				
			||||||
 | 
																	agip.add(impcms);
 | 
				
			||||||
 | 
																	agip_prec.add(impcms);  //distributore di importo pagato sulle commesse
 | 
				
			||||||
 | 
																}*/
 | 
				
			||||||
 | 
															}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
														}	//if(gruppo_iva==..
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
													}	//for (anal_rows...
 | 
				
			||||||
 | 
												}	//if anal_rows() > 0...
 | 
				
			||||||
 | 
											}	//if indicatore_bilancio!=5..
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											//aggiungi le slice con gli importi delle righe di analitica
 | 
				
			||||||
 | 
											//estrai gli importi risultanti e aggiungili a commesse (come sotto) solo se la commessa coincide
 | 
				
			||||||
 | 
											//con quella selezionata
 | 
				
			||||||
 | 
											//ricordarsi di considerare l'indetraibilita'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*						if (conto.indicatore_bilancio() != 5)
 | 
				
			||||||
 | 
											{
 | 
				
			||||||
							const real importo = rmoviva.get_real(RMI_IMPONIBILE);
 | 
												const real importo = rmoviva.get_real(RMI_IMPONIBILE);
 | 
				
			||||||
							real imposta = rmoviva.get_real(RMI_IMPOSTA);
 | 
												real imposta = rmoviva.get_real(RMI_IMPOSTA);
 | 
				
			||||||
							real* imp = (real*)commesse.objptr(cms_fsc);
 | 
												real* imp = (real*)commesse.objptr(cms_fsc);
 | 
				
			||||||
@ -438,10 +656,10 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
 | 
				
			|||||||
								totdoc_cms += imposta;
 | 
													totdoc_cms += imposta;
 | 
				
			||||||
							}
 | 
												}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
											}*/
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      totdoc = totale_documento(pn.curr()); //tot doc con ritenute fiscali + ritenute sociali (da stampare)
 | 
					//					totdoc = totale_documento(pn.curr()); //tot doc con ritenute fiscali + ritenute sociali (da stampare)
 | 
				
			||||||
					totdoc_netto = pn.curr().get_real(MOV_TOTDOC); //questo si usa solo per il calcolo del residuo
 | 
										totdoc_netto = pn.curr().get_real(MOV_TOTDOC); //questo si usa solo per il calcolo del residuo
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else  //..movimento NON iva (sempre con saldaconto)
 | 
									else  //..movimento NON iva (sempre con saldaconto)
 | 
				
			||||||
@ -461,7 +679,7 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
 | 
				
			|||||||
							continue;
 | 
												continue;
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (cerca_fiscali(conto) || cerca_sociali(conto))
 | 
					/*						if (cerca_fiscali(conto) || cerca_sociali(conto))
 | 
				
			||||||
						{
 | 
											{
 | 
				
			||||||
							totdoc -= importo.valore(); //valore da stampare nella colonna Tot.fattura con ritenute
 | 
												totdoc -= importo.valore(); //valore da stampare nella colonna Tot.fattura con ritenute
 | 
				
			||||||
							continue;
 | 
												continue;
 | 
				
			||||||
@ -470,12 +688,8 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
 | 
				
			|||||||
						const TString& codcms = rmov.get(RMV_CODCMS);
 | 
											const TString& codcms = rmov.get(RMV_CODCMS);
 | 
				
			||||||
						const TString& codfase = rmov.get(RMV_FASCMS);
 | 
											const TString& codfase = rmov.get(RMV_FASCMS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (cms_in_range(codcms,codfase) && conto.indicatore_bilancio() != 5)
 | 
											if (conto.indicatore_bilancio() != 5)
 | 
				
			||||||
						{          
 | 
											{          
 | 
				
			||||||
          TToken_string cms_fsc = codcms;
 | 
					 | 
				
			||||||
          if (codfase.not_empty())
 | 
					 | 
				
			||||||
            cms_fsc.add(codfase);
 | 
					 | 
				
			||||||
          
 | 
					 | 
				
			||||||
							real* imp = (real*)commesse.objptr(cms_fsc);
 | 
												real* imp = (real*)commesse.objptr(cms_fsc);
 | 
				
			||||||
							if (imp == NULL)
 | 
												if (imp == NULL)
 | 
				
			||||||
							{
 | 
												{
 | 
				
			||||||
@ -484,10 +698,10 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
 | 
				
			|||||||
							}
 | 
												}
 | 
				
			||||||
							*imp += importo.valore();
 | 
												*imp += importo.valore();
 | 
				
			||||||
							totdoc_cms += importo.valore();          
 | 
												totdoc_cms += importo.valore();          
 | 
				
			||||||
        }
 | 
											}*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
    }
 | 
									}	//else...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				//parte comune a movimenti IVA e non (vengono anche qui considerate le ritenute fiscali
 | 
									//parte comune a movimenti IVA e non (vengono anche qui considerate le ritenute fiscali
 | 
				
			||||||
				//e sociali perche' possono essere state inserite direttamente nella partita e non nel movimento
 | 
									//e sociali perche' possono essere state inserite direttamente nella partita e non nel movimento
 | 
				
			||||||
@ -531,7 +745,7 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
 | 
				
			|||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    FOR_EACH_ASSOC_OBJECT(commesse, h, k, imp)
 | 
					/*				FOR_EACH_ASSOC_OBJECT(commesse, h, k, imp)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					const real& impcms = *(real*)imp;
 | 
										const real& impcms = *(real*)imp;
 | 
				
			||||||
					TPag_per_cms_struct* ppcs = new TPag_per_cms_struct;
 | 
										TPag_per_cms_struct* ppcs = new TPag_per_cms_struct;
 | 
				
			||||||
@ -557,8 +771,11 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
 | 
				
			|||||||
					ppcs->_importocommessa.set_num(impcms); //importo da pagare scritto sulla fattura
 | 
										ppcs->_importocommessa.set_num(impcms); //importo da pagare scritto sulla fattura
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
					_righe.add(ppcs); //aggiunge il pagamento all'array dei pagamenti
 | 
										_righe.add(ppcs); //aggiunge il pagamento all'array dei pagamenti
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
				}*/
 | 
									}*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								} //pn.read()...
 | 
				
			||||||
 | 
							}	//if (numregcg==nreg)...
 | 
				
			||||||
 | 
						}	//for TRecnotype...
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool TPag_per_cms_recordset::part_callback(const TRelation& rel, void* pJolly)
 | 
					bool TPag_per_cms_recordset::part_callback(const TRelation& rel, void* pJolly)
 | 
				
			||||||
@ -567,8 +784,8 @@ bool TPag_per_cms_recordset::part_callback(const TRelation& rel, void* pJolly)
 | 
				
			|||||||
  const TRectype& riga_part_pag = rel.curr();
 | 
					  const TRectype& riga_part_pag = rel.curr();
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  const long nreg = recordset->find_movimento(riga_part_pag); //prima cerco un movimento della fattura...
 | 
					  const long nreg = recordset->find_movimento(riga_part_pag); //prima cerco un movimento della fattura...
 | 
				
			||||||
/*  if (nreg > 0) //..se ne trovo almeno uno cerco la commessa corrispondente
 | 
					  if (nreg > 0) //..se ne trovo almeno uno cerco la commessa corrispondente
 | 
				
			||||||
    recordset->find_commesse(nreg, riga_part_pag);*/
 | 
					    recordset->find_commesse(nreg, riga_part_pag);
 | 
				
			||||||
  return true;
 | 
					  return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -651,6 +868,13 @@ void TPag_per_cms_recordset::set_filter(const TPag_per_cms_mask& msk, const int
 | 
				
			|||||||
  _dadata = msk.get_date(F_DATAINI);
 | 
					  _dadata = msk.get_date(F_DATAINI);
 | 
				
			||||||
	_adata = msk.get_date(F_DATAFIN);
 | 
						_adata = msk.get_date(F_DATAFIN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//carica i conti memorizzati nel ca3600.ini
 | 
				
			||||||
 | 
						lettura_conti(_costi, 'C');
 | 
				
			||||||
 | 
						lettura_conti(_pagamenti, 'P');
 | 
				
			||||||
 | 
						lettura_conti(_fiscali, 'F');
 | 
				
			||||||
 | 
						lettura_conti(_sociali, 'S');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//scansione movimenti con saldaconto
 | 
						//scansione movimenti con saldaconto
 | 
				
			||||||
	scan_pags(msk);
 | 
						scan_pags(msk);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -766,6 +990,15 @@ void TPag_per_cms::stampa_per_commessa(const TPag_per_cms_mask& mask, TReport_bo
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void TPag_per_cms::main_loop()
 | 
					void TPag_per_cms::main_loop()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						//il programma si puo' usare SOLO se in contabilita' analitica si usa il piano dei conti contabile
 | 
				
			||||||
 | 
						TConfig& cfg = ca_config();
 | 
				
			||||||
 | 
						const bool use_pdcc = cfg.get_bool("UsePdcc");
 | 
				
			||||||
 | 
						if (!use_pdcc)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							error_box(TR("Programma funzionante SOLO se in contabilita' analitica si usa il piano dei conti contabile"));
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	TPag_per_cms_mask mask;
 | 
						TPag_per_cms_mask mask;
 | 
				
			||||||
  while (mask.run() == K_ENTER)
 | 
					  while (mask.run() == K_ENTER)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
				
			|||||||
@ -16,7 +16,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
//sheets conti e righe relative
 | 
					//sheets conti e righe relative
 | 
				
			||||||
#define F_PDCC          301
 | 
					#define F_PDCC          301
 | 
				
			||||||
#define F_PDCA          302
 | 
					//#define F_PDCA          302	***per ora solo Pdcc***
 | 
				
			||||||
#define F_PIANO         319
 | 
					#define F_PIANO         319
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define S_TIPO					101
 | 
					#define S_TIPO					101
 | 
				
			||||||
 | 
				
			|||||||
@ -160,7 +160,7 @@ BEGIN
 | 
				
			|||||||
  GROUP 5
 | 
					  GROUP 5
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEXT -1
 | 
					/*TEXT -1	***per ora solo Pdcc***
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 1 5 "@bPiano dei conti analitico"
 | 
					  PROMPT 1 5 "@bPiano dei conti analitico"
 | 
				
			||||||
  GROUP 6
 | 
					  GROUP 6
 | 
				
			||||||
@ -175,7 +175,7 @@ BEGIN
 | 
				
			|||||||
  ITEM "Cdc4"
 | 
					  ITEM "Cdc4"
 | 
				
			||||||
  ITEM "Cdc5"
 | 
					  ITEM "Cdc5"
 | 
				
			||||||
  GROUP 6
 | 
					  GROUP 6
 | 
				
			||||||
END
 | 
					END*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUTTON DLG_SAVEREC 12 2
 | 
					BUTTON DLG_SAVEREC 12 2
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
@ -402,7 +402,8 @@ ENDMASK
 | 
				
			|||||||
//----------------------Piano dei conti analitico------------------------------//
 | 
					//----------------------Piano dei conti analitico------------------------------//
 | 
				
			||||||
//-----------Pagina di riga dello sheet PDCA----------------------//
 | 
					//-----------Pagina di riga dello sheet PDCA----------------------//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PAGE "Riga Piano dei conti analitico" -1 -1 78 8
 | 
					//***per ora solo Pdcc***
 | 
				
			||||||
 | 
					/*PAGE "Riga Piano dei conti analitico" -1 -1 78 8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIST S_TIPO 1 18
 | 
					LIST S_TIPO 1 18
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
@ -462,4 +463,4 @@ END
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
ENDPAGE
 | 
					ENDPAGE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENDMASK
 | 
					ENDMASK*/
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user