Patch level : 12.0
Files correlati : Commento : Uniti tuuti gli header di cglib in cglib.h Aggiunto l'oggetto TMovimento_contabile con le funzioni per calcolare l'imponibile e l'imposta
This commit is contained in:
		
							parent
							
								
									d5580efcdf
								
							
						
					
					
						commit
						e131c0c61b
					
				
							
								
								
									
										1298
									
								
								src/cg/cglib.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1298
									
								
								src/cg/cglib.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										534
									
								
								src/cg/cglib06.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										534
									
								
								src/cg/cglib06.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,534 @@ | ||||
| #include "cglib.h" | ||||
| #include "cg2101.h" | ||||
| #include "cgsaldac.h" | ||||
| 
 | ||||
| 
 | ||||
| char frequenza_versamenti(const int year, long firm) | ||||
| { | ||||
| 	char freq = ' '; | ||||
| 	TString16 key; key.format("%05ld%d", firm, year); | ||||
| 	const TRectype & lia = cache().get("%LIA", key); | ||||
| 
 | ||||
| 	if (firm <= 0L) | ||||
| 		firm = prefix().get_codditta(); | ||||
| 	freq = lia.get_char("S7"); | ||||
| 	if (freq != 'M' && freq != 'T') | ||||
| 	{ | ||||
| 		const TRectype & firm_rec = cache().get(LF_NDITTE, firm); | ||||
| 
 | ||||
| 		freq = firm_rec.get_char("FREQVIVA"); | ||||
| 	} | ||||
| 	if (freq != 'M' && freq != 'T') | ||||
| 		freq = 'M'; | ||||
| 	return freq; | ||||
| } | ||||
| 
 | ||||
| int date2liq(const TDate& data, long firm) | ||||
| { | ||||
| 	const int anno = data.year(); | ||||
| 	int mese = data.month(); | ||||
| 
 | ||||
| 	if (frequenza_versamenti(anno, firm) == 'T') | ||||
| 		mese += 2 - ((mese - 1) % 3); | ||||
| 	return mese; | ||||
| } | ||||
| 
 | ||||
| bool controlla_liquidazione(const TDate & data, const TRegistro & registro, bool reset) | ||||
| { | ||||
| 	bool calcolata = false; | ||||
| 	const int anno = data.year(); | ||||
| 	const int mese = date2liq(data); | ||||
| 
 | ||||
| 	// Chiave di LIM: Anno (1-4), Mese (5-6)
 | ||||
| 	TString16 key; key.format("%04d%02d", anno, mese); | ||||
| 	TTable lim("LIM"); | ||||
| 
 | ||||
| 	lim.put("CODTAB", key); | ||||
| 	if (lim.read() == NOERR) | ||||
| 	{ | ||||
| 		calcolata = data.month() <= registro.mese_stampa_ultima_liq();  // Controlla se progressivi ricalcolati (registri)
 | ||||
| 		if (reset) | ||||
| 		{ | ||||
| 			// Resetta i flag di calcolato sulla liquidazione IVA del mese di registrazione        
 | ||||
| 			lim.zero("B0");                  // calcolato
 | ||||
| 			lim.rewrite(); | ||||
| 		} | ||||
| 	} | ||||
| 	if (reset) | ||||
| 	{ | ||||
| 		const bool att_mista = registro.name().empty() ? FALSE : registro.attivita_mista(); | ||||
| 		const int att = att_mista ? 2 : 1; | ||||
| 
 | ||||
| 		// Chiave di PLM: Anno (1-4), Cod. Att. (5-9), Tipo att. (10-10), Mese (11-12)
 | ||||
| 		TTable plm("PLM"); | ||||
| 		for (int a = 1; a <= att; a++) | ||||
| 		{ | ||||
| 			TString16 chiave; | ||||
| 			TString8 attivita(registro.attivita()); attivita.right_just(5, '0'); | ||||
| 			TString4 mese; mese.format("%02d", data.month()); | ||||
| 
 | ||||
| 			chiave << data.year() << attivita << a << mese; | ||||
| 			plm.put("CODTAB", chiave); | ||||
| 			if (plm.read() == NOERR && plm.get_bool("B0")) | ||||
| 			{ | ||||
| 				plm.zero("B0"); | ||||
| 				plm.rewrite(); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return calcolata; | ||||
| } | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////
 | ||||
| // Movimento di prima nota
 | ||||
| ///////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
| TMovimento_contabile::TMovimento_contabile() | ||||
| : TMultiple_rectype(LF_MOV), _old_iva(LF_RMOVIVA, RMI_NUMRIG) | ||||
| { | ||||
|   add_file(LF_RMOV, RMV_NUMRIG); | ||||
|   add_file(LF_RMOVIVA, RMV_NUMRIG); | ||||
| } | ||||
| 
 | ||||
| int TMovimento_contabile::readat(TBaseisamfile& f, TRecnotype nrec, word lockop) | ||||
| { | ||||
| 	const int err = TMultiple_rectype::readat(f, nrec, lockop); | ||||
| 	 | ||||
| 	if (err == NOERR) | ||||
| 	{ | ||||
| 		_olddataliq = get_date(MOV_DATAREG); // Memorizza data liquidazione
 | ||||
| 
 | ||||
| 		const int meseliq = get_int(MOV_MESELIQ); | ||||
| 
 | ||||
| 		if (meseliq > 0 && meseliq != _olddataliq.month()) | ||||
| 		{ | ||||
| 			_olddataliq.set_day(1);              // Evita problemi coi mesi corti!
 | ||||
| 			_olddataliq.set_month(meseliq); | ||||
| 		} | ||||
| 		_old_iva = iva(); | ||||
| 		update_rev_charge(); | ||||
| 	} | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| int TMovimento_contabile::read(TBaseisamfile & f, word op, word lockop) | ||||
| { | ||||
| 	const int err = TMultiple_rectype::read(f, op, lockop); | ||||
| 
 | ||||
| 	if (err == NOERR) | ||||
| 	{ | ||||
| 		_olddataliq = get_date(MOV_DATAREG); // Memorizza data liquidazione
 | ||||
| 
 | ||||
| 		const int meseliq = get_int(MOV_MESELIQ); | ||||
| 
 | ||||
| 		if (meseliq > 0 && meseliq != _olddataliq.month()) | ||||
| 		{ | ||||
| 			_olddataliq.set_day(1);              // Evita problemi coi mesi corti!
 | ||||
| 			_olddataliq.set_month(meseliq); | ||||
| 		} | ||||
| 		_old_iva = iva(); | ||||
| 		update_rev_charge(); | ||||
| 	} | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| int TMovimento_contabile::write_rewrite(TBaseisamfile& f, bool re) const | ||||
| { | ||||
| 	long numreg = get_long(MOV_NUMREG); // ??
 | ||||
| 	TMovimento_contabile & this_mov = (TMovimento_contabile &)*this; | ||||
| 
 | ||||
| 	if (numreg <= 0) | ||||
| 	{ | ||||
| 		if (!re) // Tento di numerare automaticamente in caso di write
 | ||||
| 		{ | ||||
| 			TLocalisamfile mov(LF_MOV); // Non sposto il file principale della relazione!			if (mov.last() == NOERR)
 | ||||
| 			const long numreg = mov.get_long(MOV_NUMREG) + 1; | ||||
| 
 | ||||
| 			this_mov.put(MOV_NUMREG, numreg); | ||||
| 			this_mov.cg().renum_key(RMV_NUMREG, numreg); | ||||
| 			this_mov.iva().renum_key(RMI_NUMREG, numreg); | ||||
| 		} | ||||
| 		else | ||||
| 			return _isnocurkey; | ||||
| 	} | ||||
| 	 | ||||
| 	((TMovimento_contabile *)this)->find_movcoll(); | ||||
| 	int err = TMultiple_rectype::write_rewrite(f, re); | ||||
| 
 | ||||
| 	if (err == NOERR) | ||||
| 	{ | ||||
| 		const int annoiva = get_int(MOV_ANNOIVA); | ||||
| 		const TString4 reg(get(MOV_REG)); | ||||
| 		TRegistro registro(reg, annoiva); | ||||
| 		const bool att_mista = reg.empty() ? false : registro.attivita_mista(); | ||||
| 		int last_iva = iva().last_row(); | ||||
| 
 | ||||
| 		for (int i = iva().first_row(); i <= last_iva; i = iva().succ_row(i)) | ||||
| 		{ | ||||
| 			TRectype & r = this_mov.iva(i); | ||||
| 			int tipoatt = 1; | ||||
| 			if (att_mista) | ||||
| 			{ | ||||
| 				const char tipo = r.get_char(RMI_TIPOC); | ||||
| 				if (tipo <= ' ') | ||||
| 				{ | ||||
| 					TBill c(r.get_int(RMI_GRUPPO), r.get_int(RMI_CONTO), r.get_long(RMI_SOTTOCONTO)); | ||||
| 					tipoatt = c.tipo_att(); | ||||
| 				} | ||||
| 			} | ||||
| 			r.put(RMI_TIPOATT, tipoatt); | ||||
| 
 | ||||
| 			const TString & indetr = r.get(RMI_TIPODET); | ||||
| 			if (indetr.full()) | ||||
| 			{ | ||||
| 				const TRectype& det = cache().get("%DET", indetr); | ||||
| 				if (!det.empty() && !det.get_bool("FPC")) | ||||
| 				{ | ||||
| 					TTable tab("%DET"); | ||||
| 					tab.curr() = det; | ||||
| 					tab.curr().put("FPC", "X"); | ||||
| 					tab.rewrite(); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		// Aggiorna data registrazione e protocollo IVA sul registro
 | ||||
| 		const TDate datareg(get(MOV_DATAREG)); | ||||
| 
 | ||||
| 		if (reg.full()) | ||||
| 		{ | ||||
| 			const long protiva = get_long(MOV_PROTIVA); | ||||
| 			const long uprotiva = get_long(MOV_UPROTIVA); | ||||
| 			const long max = protiva > uprotiva ? protiva : uprotiva; | ||||
| 			registro.update(max, datareg); | ||||
| 		} | ||||
| 
 | ||||
| 		// Aggiorna flags di ricalcolo liquidazione
 | ||||
| 		TDate dataliq(datareg); | ||||
| 
 | ||||
| 		const int mese_liq = get_int(MOV_MESELIQ); | ||||
| 		if (mese_liq > 0 && mese_liq != dataliq.month()) | ||||
| 		{ | ||||
| 			dataliq.set_day(1);              // Evita problemi coi mesi corti!
 | ||||
| 			dataliq.set_month(mese_liq); | ||||
| 		} | ||||
| 
 | ||||
| 		bool reset = !re; | ||||
| 		if (reg.full()) | ||||
| 		{ | ||||
| 			reset = (dataliq.month() != _olddataliq.month() || _old_iva != iva()); | ||||
| 			if (dataliq.month() != _olddataliq.month()) | ||||
| 				controlla_liquidazione(_olddataliq, registro, true); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			const TCausale & causale = cached_causale(get(MOV_CODCAUS), annoiva); | ||||
| 
 | ||||
| 			if (causale.saldaconto(datareg) && causale.tipomov() != tm_fattura) | ||||
| 			{ | ||||
| 				TPartite_array partarray; | ||||
| 
 | ||||
| 				partarray.add_numreg(numreg); | ||||
| 
 | ||||
| 				const int npart = partarray.items(); | ||||
| 
 | ||||
| 				for (TPartita * part = partarray.first(); !reset && part != nullptr; part = partarray.next()) | ||||
| 				{ | ||||
| 					const int nrpart = part->last(); | ||||
| 
 | ||||
| 					for (int r = part->prima_fattura(); !reset && r >= 0 && r <= nrpart; r = part->succ(r)) | ||||
| 					{ | ||||
| 						TRiga_partite & rp = part->riga(r); | ||||
| 
 | ||||
| 						if (rp.is_fattura()) | ||||
| 						{ | ||||
| 							const TRectype & mov = cache().get(LF_MOV, rp.get(PART_NREG)); | ||||
| 
 | ||||
| 							reset = mov.get_bool(MOV_LIQDIFF) || mov.get_bool(MOV_IVAXCASSA); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		if (reset) | ||||
| 			controlla_liquidazione(dataliq, registro, reset); | ||||
| 	} | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| void TMovimento_contabile::find_movcoll() | ||||
| { | ||||
| 	if (get_long(MOV_MOVCOLL) == 0L) | ||||
| 	{ | ||||
| 		const TCausale& cau = cached_causale(get(MOV_CODCAUS), get_int(MOV_ANNOES)); | ||||
| 		const TString4 cau_reg = cau.causale_reg_iva(); | ||||
| 		TToken_string key(get(MOV_TIPO)); key.add(get_long(MOV_CODCF)); | ||||
| 		const long codcli = cache().get(LF_CLIFO, key).get_long(CLI_CODCFASS); | ||||
| 		const long numreg = get_long(MOV_NUMREG); | ||||
| 		TString query("USE "); query << LF_MOV << " KEY 1 SELECT " << MOV_CODCAUS << "==\"" << cau_reg << "\"\nFROM " << MOV_NUMREG << "==" << numreg; | ||||
| 		TISAM_recordset mov(query); | ||||
| 		long movcoll = 0L; | ||||
| 
 | ||||
| 		for (bool ok = mov.move_first(); ok && movcoll == 0L; ok = mov.move_next()) | ||||
| 		{ | ||||
| 			TRectype& curr = (TRectype&)mov.cursor()->curr(); | ||||
| 			const long movcoll_found = curr.get_long(MOV_MOVCOLL); | ||||
| 
 | ||||
| 			if ((curr.get_long(MOV_CODCF) == codcli) && ((movcoll_found == 0L) || (movcoll_found == numreg))) | ||||
| 			{ | ||||
| 				movcoll = mov.get(MOV_NUMREG).as_int(); | ||||
| 				curr.put(MOV_MOVCOLL, numreg); | ||||
| 				curr.rewrite(TLocalisamfile(LF_MOV)); | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		put(MOV_MOVCOLL, movcoll); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void TMovimento_contabile::update_rev_charge() | ||||
| { | ||||
| 	const int year = get_int(MOV_ANNOIVA); | ||||
| 	const TString & codcaus = get(MOV_CODCAUS); | ||||
| 	const TCausale & caus = cached_causale(codcaus, year); | ||||
| 	const TipoIVA t = caus.iva(); | ||||
| 	 | ||||
| 	if (t == iva_acquisti) | ||||
| 	{ | ||||
| 		const bool rev_charge = caus.reverse_charge_pubb(); | ||||
| 
 | ||||
| 		if (rev_charge) | ||||
| 		{ | ||||
| 			real imp_revcharge; | ||||
| 			bool has_revcharge = false; | ||||
| 			int last_iva = iva().last_row(); | ||||
| 
 | ||||
| 			for (int i = iva().first_row(); !has_revcharge && i <= last_iva; i = iva().succ_row(i)) | ||||
| 			{ | ||||
| 				has_revcharge |= iva(i, false).get_bool(RMI_REVCHARGE); | ||||
| 				imp_revcharge += iva(i, false).get_real(RMI_IMPOSTA); | ||||
| 			} | ||||
| 			if (!has_revcharge) | ||||
| 			{ | ||||
| 				if (get_real(MOV_REVCHARGE) <= ZERO) | ||||
| 				{ | ||||
| 					put(MOV_REVCHARGE, imp_revcharge); | ||||
| 					sub(MOV_RITFIS, imp_revcharge); | ||||
| 					if (get_real(MOV_RITFIS) < ZERO) | ||||
| 						TRectype::zero(MOV_RITFIS); | ||||
| 				} | ||||
| 				for (int i = iva().first_row(); i <= last_iva; i = iva().succ_row(i)) | ||||
| 					iva(i, false).put(RMI_REVCHARGE, true); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| int TMovimento_contabile::remove() | ||||
| {          | ||||
|   const int err = TMultiple_rectype::remove(); | ||||
|   if (err == NOERR) | ||||
|   {                         | ||||
| 
 | ||||
|     const TString4 reg(get(MOV_REG)); | ||||
|     const int annoiva = get_int(MOV_ANNOIVA); | ||||
|     TRegistro registro(reg, annoiva); | ||||
|     controlla_liquidazione(_olddataliq, registro, true); | ||||
|   }                            | ||||
|    | ||||
|   return err; | ||||
| } | ||||
| 
 | ||||
| real TMovimento_contabile::imponibile(const char * codiva) const | ||||
| { | ||||
| 	real imponibile; | ||||
| 	const TString8 cod(codiva); | ||||
| 	int last_iva = iva().last_row(); | ||||
| 
 | ||||
| 	for (int i = iva().first_row(); i <= last_iva; i = iva().succ_row(i)) | ||||
| 		if (cod.blank() || cod == iva(i, false).get(RMI_CODIVA)) | ||||
| 			imponibile += iva(i, false).get_real(RMI_IMPONIBILE); | ||||
| 	return imponibile; | ||||
| } | ||||
| 
 | ||||
| real TMovimento_contabile::imposta(const char * codiva) const | ||||
| { | ||||
| 	real imposta; | ||||
| 	const TString8 cod(codiva); | ||||
| 	int last_iva = iva().last_row(); | ||||
| 
 | ||||
| 	for (int i = iva().first_row(); i <= last_iva; i = iva().succ_row(i)) | ||||
| 		if (cod.blank() || cod == iva(i, false).get(RMI_CODIVA)) | ||||
| 			imposta += iva(i, false).get_real(RMI_IMPOSTA); | ||||
| 	return imposta; | ||||
| } | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////
 | ||||
| // Aggiustamento movimenti rovinati o convertiti male
 | ||||
| ///////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
| 
 | ||||
| bool TConti_array::add(const TBill& conto, const real& importo) | ||||
| { | ||||
|   const char* key = conto.string(); | ||||
|   real* imp = (real*)objptr(key); | ||||
| 
 | ||||
|   if (imp == nullptr) | ||||
|     TAssoc_array::add(key, importo); | ||||
|   else | ||||
|     *imp += importo; | ||||
|   return imp != nullptr; | ||||
| } | ||||
| 
 | ||||
| real TConti_array::importo(const TBill& conto) | ||||
| { | ||||
|   const char* key = conto.string(); | ||||
|   const real* imp = (real*)objptr(key); | ||||
|   return imp ? *imp : ZERO; | ||||
| } | ||||
| 
 | ||||
| bool TConti_array::remove(const TBill& conto) | ||||
| { | ||||
|   const char* key = conto.string(); | ||||
|   return TAssoc_array::remove(key); | ||||
| } | ||||
| 
 | ||||
| bool TConti_array::add_iva(bool det, const real& importo) | ||||
| { | ||||
|   real* imp = nullptr; | ||||
| 
 | ||||
|   if (!importo.is_zero()) | ||||
|   { | ||||
|     const char* const key = det ? "D" : "N"; | ||||
| 
 | ||||
|     imp = (real*)objptr(key); | ||||
|     if (imp == nullptr) | ||||
|       TAssoc_array::add(key, importo); | ||||
|     else | ||||
|       *imp += importo; | ||||
|   }     | ||||
|   return imp != nullptr; | ||||
| } | ||||
| 
 | ||||
| real TConti_array::importo_iva(bool det) | ||||
| { | ||||
|   const char* const key = det ? "D" : "N"; | ||||
|   const real* imp = (real*)objptr(key); | ||||
|   return imp ? *imp : ZERO; | ||||
| } | ||||
| 
 | ||||
| bool TConti_array::remove_iva(bool det) | ||||
| { | ||||
|   const char* const key = det ? "D" : "N"; | ||||
|   return TAssoc_array::remove(key); | ||||
| } | ||||
| 
 | ||||
| // Aggiusta i row types se sono andati persi o non sono stati convertiti
 | ||||
| void TMovimento_contabile::adjust_rowtypes() | ||||
| { | ||||
|   const char tipo = get_char(MOV_TIPO); | ||||
|   const long codice = get_long(MOV_CODCF); | ||||
|   const int annoiva = get_int(MOV_ANNOIVA); | ||||
|   const int annodoc = get_date(MOV_DATADOC).year(); | ||||
|   const TCausale causale(get(MOV_CODCAUS), annoiva); | ||||
| 	TBill billind; causale.bill(RIGA_IVA_NON_DETRAIBILE, billind); | ||||
| 	const bool corrispettivo = causale.corrispettivi(); | ||||
| 	const bool iva_ind_al_costo = !billind.ok(); | ||||
| 
 | ||||
|   TConti_array conti; | ||||
| 	const int last_iva = iva().last_row(); | ||||
| 	   | ||||
|   for (int i = iva().first_row(); i < last_iva; i = iva().succ_row(i)) | ||||
|   {        | ||||
|     const TRectype& row = iva(i); | ||||
|     const TBill bill(row);  | ||||
|     const real imponibile(row.get(RMI_IMPONIBILE)); | ||||
|     const real imposta(row.get(RMI_IMPOSTA)); | ||||
|     const TString4 codiva = row.get(RMI_CODIVA); | ||||
|     const TString4 codind = row.get(RMI_TIPODET); | ||||
| 		int tipodet = 0; | ||||
| 		const real perc_ind = indetraibile_al(codind, causale, annodoc, tipodet); | ||||
| 		real imp_det, iva_det, imp_ind, iva_ind; | ||||
| 		analizza_IVA(imponibile, imposta, perc_ind, corrispettivo, iva_ind_al_costo, | ||||
| 			codiva, imp_det, iva_det, imp_ind, iva_ind); | ||||
|     conti.add(bill, imponibile); | ||||
|     conti.add_iva(false, iva_ind); | ||||
|     conti.add_iva(true, iva_det); | ||||
|   } | ||||
|    | ||||
| 	const int last_cg = cg().last_row(); | ||||
|   bool totale = false; | ||||
|   bool ritfis = get_real(MOV_RITFIS) == ZERO; | ||||
|   bool ritsoc = get_real(MOV_RITSOC) == ZERO; | ||||
|   bool ivadet = conti.importo_iva(true) == ZERO; | ||||
|   bool ivanon = conti.importo_iva(false) == ZERO; | ||||
| 	TBill conto_rit_fis; | ||||
| 	TBill conto_rit_soc; | ||||
| 		 | ||||
| 	causale.bill(RIGA_PAG_RITFIS, conto_rit_fis); | ||||
| 	causale.bill(RIGA_PAG_RITSOC, conto_rit_soc); | ||||
| 	for (int c = cg().first_row(); c < last_cg; c = cg().succ_row(c)) | ||||
|   {        | ||||
|     TRectype& row = cg(c); | ||||
|     const char rt = row.get_char(RMV_ROWTYPE); | ||||
| 
 | ||||
|     switch(rt) | ||||
|     {                | ||||
| 			case cgrowtype_ritfis: ritfis = true; break; | ||||
| 			case cgrowtype_ritsoc: ritsoc = true; break; | ||||
| 			case cgrowtype_totale: totale = true; break; | ||||
| 			default : break; | ||||
| 		} | ||||
| 		if (rt == ' ') | ||||
| 		{ | ||||
| 			if (!totale && row.get_char(RMV_TIPOC) == tipo && row.get_long(RMV_SOTTOCONTO) == codice) | ||||
| 			{ | ||||
| 				row.put(RMV_ROWTYPE, cgrowtype_totale); | ||||
| 				totale = true; | ||||
| 				continue; | ||||
| 			} | ||||
| 
 | ||||
| 			const real importo(row.get(RMV_IMPORTO)); | ||||
| 			const TBill bill(row); | ||||
| 
 | ||||
| 			if (!ritfis && importo == get_real(MOV_RITFIS)) | ||||
| 			{ | ||||
| 				if (!conto_rit_fis.ok() || conto_rit_fis == bill) | ||||
| 				{ | ||||
| 					row.put(RMV_ROWTYPE, cgrowtype_ritfis); | ||||
| 					ritfis = true; | ||||
| 					continue; | ||||
| 				} | ||||
| 			} | ||||
| 			if (!ritsoc && importo == get_real(MOV_RITSOC)) | ||||
| 			{ | ||||
| 				if (!conto_rit_soc.ok() || conto_rit_soc == bill) | ||||
| 				{ | ||||
| 					row.put(RMV_ROWTYPE, cgrowtype_ritsoc); | ||||
| 					ritsoc = true; | ||||
| 					continue; | ||||
| 				} | ||||
| 			} | ||||
| 			if (conti.ok()) | ||||
| 			{ | ||||
| 				if (importo == conti.importo(bill)) | ||||
| 				{ | ||||
| 					row.put(RMV_ROWTYPE, cgrowtype_imponibile); | ||||
| 					conti.remove(bill); | ||||
| 				} | ||||
| 				else | ||||
| 					if (!ivadet && importo == conti.importo_iva(true)) | ||||
| 					{ | ||||
| 						row.put(RMV_ROWTYPE, cgrowtype_IVAdet); | ||||
| 						conti.remove_iva(true); | ||||
| 					} | ||||
| 					else | ||||
| 						if (!ivanon && importo == conti.importo_iva(false)) | ||||
| 						{ | ||||
| 							row.put(RMV_ROWTYPE, cgrowtype_IVAnondet); | ||||
| 							conti.remove_iva(FALSE); | ||||
| 						} | ||||
| 			} | ||||
| 		} | ||||
|   } | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user