Correzione in liquidazione IVA relativa allo scorporo corretto
(sia in annuale che nel periodo). git-svn-id: svn://10.65.10.50/trunk@4139 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									2d4a8bddba
								
							
						
					
					
						commit
						cafd3fcd50
					
				
							
								
								
									
										100
									
								
								cg/cg4301.cpp
									
									
									
									
									
								
							
							
						
						
									
										100
									
								
								cg/cg4301.cpp
									
									
									
									
									
								
							| @ -570,16 +570,16 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) | ||||
| 
 | ||||
|   for (; _cur->pos() < items; ++(*_cur)) | ||||
|   {                                | ||||
| #ifdef DBG | ||||
|     if (_cur->pos() % 100 == 0L) | ||||
|     if ((_cur->pos() & 0x7F) == 0) | ||||
|     { | ||||
| #ifdef DBG | ||||
|       msgdbg.format("Ricalcolo attivita': P=%ld/%ld",_cur->pos(),items); | ||||
|       freespace = GetFreeSpace(0); | ||||
|       msgdbg << " Memoria libera(1): " << freespace/1024 << " Kbytes."; | ||||
|       xvt_statbar_set(msgdbg); | ||||
| #endif   | ||||
|       do_events(); | ||||
|     } | ||||
| #endif   | ||||
|     TDate date(_mov->get("DATAREG")); | ||||
|     TString16 reg     = _mov->get("REG"); | ||||
|     bool isreg        = look_reg(_mov->get("REG")); | ||||
| @ -985,6 +985,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) | ||||
|       real imp = _pim->get_real("R0"); // imponibile
 | ||||
|       real ivp = _pim->get_real("R1"); // IVA su imp.
 | ||||
|       real lor = _pim->get_real("R2"); // lordo  
 | ||||
|       real lorcor = _pim->get_real("R3"); // lordo corrispettivi (da non ventilare)
 | ||||
| 
 | ||||
|       /*
 | ||||
|        * le maledette fatture con scontrino sono sul registro dei | ||||
| @ -1103,6 +1104,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) | ||||
|           { | ||||
|             real perc = _iva->get_real("R0")/CENTO; | ||||
|             lor += imponibile + imposta;    | ||||
|             lorcor += imponibile+imposta; | ||||
|             real tot = imponibile+imposta;    | ||||
|             if (liq) add_corrisp(month, reg, tot, perc, tipodet, codiva, codatt); | ||||
|           } | ||||
| @ -1196,6 +1198,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) | ||||
|           _pim->put("R0",imp); | ||||
|           _pim->put("R1",ivp); | ||||
|           _pim->put("R2",lor);    | ||||
|           _pim->put("R3",lorcor);   // Corrispettivi, non inclusi quelli da ventilare
 | ||||
|           _pim->put("R5",ifs);    | ||||
|           _pim->put("R6",vfs);    | ||||
|           _pim->put("R7",adf);    | ||||
| @ -1772,6 +1775,10 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt) | ||||
|   _BolgArray b_arr; | ||||
|   const bool is_key = _iva11_arr.is_key(codatt); | ||||
|   _BolgArray& array = is_key ? (_BolgArray&)_iva11_arr.find(codatt) : b_arr; | ||||
|   // Scorporo corretto dei corrispettivi in R3
 | ||||
|   TAssoc_array corr_ann; | ||||
|   _CorrItem cx,*cc; | ||||
|   bool is_present; | ||||
|               | ||||
|   for (_pim->first(); !_pim->eof();  _pim->next()) | ||||
|   {            | ||||
| @ -1878,6 +1885,16 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt) | ||||
| 
 | ||||
|       if ((_isagricolo && tagr==2) || !_isagricolo) | ||||
|       { | ||||
|         // Accumula i corrispettivi da scorporare per codice iva
 | ||||
|         is_present =  corr_ann.is_key(codiva); | ||||
|         cx._totale = 0; | ||||
|         _CorrItem& ca = is_present ? (_CorrItem&) corr_ann[codiva] : cx; | ||||
|         ca._totale += _pim->get_real("R3"); | ||||
|         if (!is_present) // se non c'e' lo aggiunge
 | ||||
|         { | ||||
|           ca._aliquota = _iva->get_real("R0"); // Se e' nuovo setta l'aliquota
 | ||||
|           corr_ann.add(codiva,ca); | ||||
|         } | ||||
|         tt = _pim->get("S0"); | ||||
|         a13i = tt.get(0); | ||||
|         a13v = tt.get(1); | ||||
| @ -1957,6 +1974,44 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt) | ||||
|     } | ||||
|   } | ||||
|    | ||||
|   // Scorre i corrispettivi lordi accumulati, li scorpora ed aggiorna i righi relativi
 | ||||
|   for (cc = (_CorrItem *)corr_ann.first_item(); cc != NULL; cc = (_CorrItem *)corr_ann.succ_item()) | ||||
|   { | ||||
|     lordo2netto(cc->_totale,imp,iva,cc->_aliquota/CENTO); | ||||
|     vtot += imp; ivav += iva; | ||||
|     if (cc->_aliquota == 4.00) | ||||
|     { | ||||
|       array.add(imp,TAB11_EC101); | ||||
|       array.add(iva,TAB11_EC201); | ||||
|     } | ||||
|     else if (cc->_aliquota == 9.00) | ||||
|     { | ||||
|       array.add(imp,TAB11_EC102);  | ||||
|       array.add(iva,TAB11_EC202);  | ||||
|     } | ||||
|     else if (cc->_aliquota == 10.00) | ||||
|     { | ||||
|       array.add(imp,TAB11_EC103);  | ||||
|       array.add(iva,TAB11_EC203);  | ||||
|     } | ||||
|     else if (cc->_aliquota == 13.00) | ||||
|     { | ||||
|       array.add(imp,TAB11_EC104);  | ||||
|       array.add(iva,TAB11_EC204);  | ||||
|     } | ||||
|     else if (cc->_aliquota == 16.00) | ||||
|     { | ||||
|       array.add(imp,TAB11_EC105);  | ||||
|       array.add(iva,TAB11_EC205);  | ||||
|     } | ||||
|     else if (cc->_aliquota == 19.00) | ||||
|     { | ||||
|       array.add(imp,TAB11_EC106);  | ||||
|       array.add(iva,TAB11_EC206);  | ||||
|     } | ||||
|   }   | ||||
|    | ||||
|    | ||||
|   // Hisss... Rettifica l'importo di EC115: EC115 = EC116 + EC117 + EC115
 | ||||
|   // Va beh...
 | ||||
|   real r16, r17; | ||||
| @ -2616,8 +2671,14 @@ void TLiquidazione_app::recalc_annual(const char* att) | ||||
|   es_b3    = _pla->get_real("R3"); | ||||
|   cess_amm = _pla->get_real("R4");   | ||||
|   pro_pag  = _pla->get_real("R12"); | ||||
|   iva_acq  = _pla->get_real("R11");  | ||||
| 
 | ||||
|   iva_acq  = _pla->get_real("R11"); | ||||
|    | ||||
|   // Per avere un risultato corretto, si deve totalizzare PIM->R3 per codice iva
 | ||||
|   // e quindi effettuare lo scorporo dell'imponibile e aggiungere al relativo volume d'affari
 | ||||
|   TAssoc_array corr_ann; | ||||
|   _CorrItem cx,*cc; | ||||
|   bool is_key; | ||||
|    | ||||
|   for (_pim->first(); !_pim->eof();  _pim->next()) | ||||
|   {            | ||||
|     if (_year != *_pim_anno) continue; | ||||
| @ -2636,8 +2697,19 @@ void TLiquidazione_app::recalc_annual(const char* att) | ||||
|     a13     = _pim->get("S0"); | ||||
|     imp_a13 = a13.get(0); | ||||
|     imp_ifs -= imp_af + imp_a13; // Toglie le autofatture e le op. A13
 | ||||
|     if  (corrisp) imp_ifs += _pim->get_real("R5"); // Se corrisp. aggiunge le FS
 | ||||
|      | ||||
|     if  (corrisp) | ||||
|     { | ||||
|       imp_ifs += _pim->get_real("R5"); // Se corrisp. aggiunge le FS
 | ||||
|       is_key =  corr_ann.is_key(codiva); | ||||
|       cx._totale = 0; | ||||
|       _CorrItem& ca = is_key ? (_CorrItem&) corr_ann[codiva] : cx; | ||||
|       ca._totale += _pim->get_real("R3"); | ||||
|       if (!is_key) // se non c'e' lo aggiunge
 | ||||
|       { | ||||
|         ca._aliquota = _iva->get_real("R0")/CENTO; // Se e' nuovo setta l'aliquota
 | ||||
|         corr_ann.add(codiva,ca); | ||||
|       } | ||||
|     } | ||||
|     if (                                        // ESCLUSI:      
 | ||||
|         strcmp(att,*_pim_codatt) != 0   || | ||||
|         treg != vendita                 || //   non vendite
 | ||||
| @ -2652,7 +2724,19 @@ void TLiquidazione_app::recalc_annual(const char* att) | ||||
|     else | ||||
|      volaff2 += imp_ifs; | ||||
|   } | ||||
| 
 | ||||
|    | ||||
|   // Ora si scorporano i corrispettivi raggruppati per codice IVA  e si totalizzano gli imponibili
 | ||||
|   // calcolati, da aggiungere poi a volaff1 o volaff2
 | ||||
|   real imp,iva; | ||||
|   for (cc = (_CorrItem *)corr_ann.first_item(); cc != NULL; cc = (_CorrItem *)corr_ann.succ_item()) | ||||
|   { | ||||
|     lordo2netto(cc->_totale,imp,iva,cc->_aliquota); | ||||
|     if (tipoatt == 1) | ||||
|       volaff1 += imp; | ||||
|     else  | ||||
|       volaff2 += imp; | ||||
|   }  | ||||
|    | ||||
|   // calcola esenti, cessioni, lordo vendite, prorata pagato
 | ||||
|   // e IVA acquisti dai plm/ptm/pum/pam/pom 
 | ||||
|    | ||||
|  | ||||
| @ -105,7 +105,7 @@ void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt) | ||||
|   // x13
 | ||||
|   TString key; | ||||
|   bool is_key; | ||||
|   TAssoc_array corr_ann;  // Contiene corrispettivi annuali (temporaneo, da rimuovere
 | ||||
|   TAssoc_array corr_ann;  // Contiene corrispettivi annuali (temporaneo, da correggere
 | ||||
|                           // non appena implementato correttamente il mese 13)
 | ||||
|   _CorrItem cx; | ||||
|    | ||||
| @ -117,25 +117,26 @@ void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt) | ||||
|   for (int i = 0; i < items; i++) | ||||
|   { | ||||
|     _CorrItem* ci = (_CorrItem*)&_corr_arr[i]; | ||||
|     // Se e' annuale  memorizza in un assoc_array i corrispettivi annuali
 | ||||
|     // memorizza  per attivita'+registro+codiva+tipodet
 | ||||
|     // memorizza  per codiva
 | ||||
|     // x13
 | ||||
|     if (month == 13) | ||||
|     if ((month != 13 && ci->_month != month) || ci->_codatt != codatt) continue; | ||||
|      | ||||
|     key = ci->_codiva; | ||||
|     is_key =  corr_ann.is_key(key); | ||||
|     cx._totale = 0; | ||||
|     _CorrItem& ca = is_key ? (_CorrItem&) corr_ann[key] : cx; | ||||
|     ca._totale += ci->_totale; | ||||
|     if (!is_key) // se non c'e' lo aggiunge
 | ||||
|     { | ||||
|       key = ci->_codiva; | ||||
|       is_key =  corr_ann.is_key(key); | ||||
|       cx._totale = 0; | ||||
|       _CorrItem& ca = is_key ? (_CorrItem&) corr_ann[key] : cx; | ||||
|       ca._totale += ci->_totale; | ||||
|       if (!is_key) // se non c'e' lo aggiunge
 | ||||
|       { | ||||
|         ca._aliquota = ci->_aliquota; | ||||
|         ca._codreg = ci->_codreg; | ||||
|         ca._tipodet = ci->_tipodet; | ||||
|         corr_ann.add(key,ca); | ||||
|       } | ||||
|       continue; | ||||
|       ca._aliquota = ci->_aliquota; | ||||
| /*
 | ||||
|       ca._codreg = ci->_codreg; | ||||
|       ca._tipodet = ci->_tipodet; | ||||
| */       | ||||
|       corr_ann.add(key,ca); | ||||
|     } | ||||
| /*    
 | ||||
|     continue; | ||||
|     // fine x13
 | ||||
|      | ||||
|     if (ci->_month != month || ci->_codatt != codatt)  | ||||
| @ -162,21 +163,24 @@ void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt) | ||||
|     _pim->put("R0", imponibile); | ||||
|     _pim->put("R1", imposta);   | ||||
|     _pim->rewrite();                 | ||||
| */     | ||||
|   } | ||||
|   // Dopo aver calcolato la somma dei corrispettivi annualmente, li scorpora  
 | ||||
|   // x13
 | ||||
|   if (month == 13) | ||||
|   { | ||||
|   // if (month == 13)
 | ||||
|   //{
 | ||||
|     real imp,iva,imp1,iva1; | ||||
|     _CorrItem* cc; | ||||
|     // Per le prossime scritture uso impropriamente il mese 12, lo so e' terribile...
 | ||||
|     // Per le prossime scritture(PAM e PLM) uso impropriamente il mese 12, lo so e' terribile...
 | ||||
|     // ma non appena possibile il mese 13 sara' disponibile tutto sara' piu' bello.
 | ||||
|     //const int m = month == 13 ? 12 : month; 
 | ||||
|     for (cc = (_CorrItem *)corr_ann.first_item(); cc != NULL; cc = (_CorrItem *)corr_ann.succ_item()) | ||||
|     { | ||||
|       lordo2netto(cc->_totale, imp, iva, cc->_aliquota); | ||||
|       imponibile += imp; | ||||
|       imposta    += iva; | ||||
|       look_pim(12, codatt, cc->_codreg, "", corr_ann.get_hashobj()->key(), cc->_tipodet, TRUE); | ||||
| /*      
 | ||||
|       look_pim(m, codatt, cc->_codreg, "", corr_ann.get_hashobj()->key(), cc->_tipodet, TRUE); | ||||
|        imp1 = _pim->get_real("R0"); | ||||
|        iva1 = _pim->get_real("R1"); | ||||
|        imp1 += imp; | ||||
| @ -184,8 +188,10 @@ void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt) | ||||
|       _pim->put("R0",imp1); | ||||
|       _pim->put("R1",iva1); | ||||
|       _pim->rewrite(); | ||||
| */       | ||||
|     //}
 | ||||
|     } | ||||
|     look_plm(12, codatt); // Aggiorna l'iva vendite in PLM...
 | ||||
|     look_plm(month, codatt); // Aggiorna l'iva vendite in PLM...
 | ||||
|     real ive = _plm->get_real("R0"); | ||||
|     ive     += imposta; | ||||
|     _plm->put("R0",ive); | ||||
| @ -195,7 +201,6 @@ void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt) | ||||
|     _pam->put("R1",vaf); | ||||
|     _plm->rewrite(); | ||||
|     _pam->rewrite(); | ||||
|   } | ||||
|   // fine x13
 | ||||
| } | ||||
| 
 | ||||
| @ -651,18 +656,26 @@ _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts, | ||||
|    | ||||
|   // Condizione 2...
 | ||||
|   // scorri i bellissimi progressivi mensili
 | ||||
|   // Nota: i valori ricavati vanno poi integrati con R3, dove sono memorizzati i corrispettivi da scorporare
 | ||||
|   // anche qui si accumula per codice iva e si effettua lo scorporo alla fine del ciclo.
 | ||||
|   TAssoc_array corr_ann; | ||||
|   TString codiva; | ||||
|   _CorrItem cx,*cc; | ||||
|   bool is_key; | ||||
|    | ||||
|   const int year  = atoi((const char*)_year); | ||||
|   for (_pim->first(); !_pim->eof(); _pim->next())  | ||||
|   {                                    | ||||
|     int ryear = atoi(*_pim_anno); | ||||
|     int rmese = atoi(*_pim_mese); | ||||
|     int tipodet = atoi(*_pim_tipodet); | ||||
|     codiva = *_pim_codiva; | ||||
|      | ||||
|     // B3 significa che e' acq. o vendita valido per rimb. per aliquota                                    
 | ||||
|     if (!_pim->get_bool("B3")) continue; | ||||
|      | ||||
|     // Se il tipo di codice e' NS non va considerato nella sommatoria del tot. acquisti
 | ||||
|     look_iva(*_pim_codiva); | ||||
|     look_iva(codiva); | ||||
|     const bool non_sogg = _iva->get("S1") == "NS"; | ||||
| 
 | ||||
|     if (!is_mens) // Trimestrali
 | ||||
| @ -687,6 +700,15 @@ _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts, | ||||
|         // vedi sopra...
 | ||||
|         vtot += imp;      | ||||
|         ivav += iva; | ||||
|         is_key =  corr_ann.is_key(codiva); | ||||
|         cx._totale = 0; | ||||
|         _CorrItem& ca = is_key ? (_CorrItem&) corr_ann[codiva] : cx; | ||||
|         ca._totale += _pim->get_real("R3"); | ||||
|         if (!is_key) // se non c'e' lo aggiunge
 | ||||
|         { | ||||
|           ca._aliquota = _iva->get_real("R0")/CENTO; // Se e' nuovo setta l'aliquota
 | ||||
|           corr_ann.add(codiva,ca); | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|     else  | ||||
| @ -698,6 +720,14 @@ _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts, | ||||
|       } | ||||
|   } // end of for
 | ||||
|    | ||||
|   real impc,ivac; // Aggiunge lo scorporo dei corrispettivi alle vendite calcolate
 | ||||
|   for (cc = (_CorrItem *)corr_ann.first_item(); cc != NULL; cc = (_CorrItem *)corr_ann.succ_item()) | ||||
|   { | ||||
|     lordo2netto(cc->_totale,impc,ivac,cc->_aliquota); | ||||
|     vtot += impc; | ||||
|     ivav += ivac; | ||||
|   } | ||||
| 
 | ||||
|   // finalmente
 | ||||
|   alv = ivav/vtot;  alv.round(4); | ||||
|   ala = ivaa/atot;  ala.round(4); | ||||
|  | ||||
| @ -469,6 +469,11 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt) | ||||
|   _DescrItem* hea = new _DescrItem(PIM_HEAD); | ||||
|   hea->_f0 = skip_acq; // cosi' non compare nemmeno la colonnina! contento?
 | ||||
|   _descr_arr.add(hea); | ||||
|   // Assoc array per memorizzare i corrispettivi da scorporare. Tali corrispettivi verranno
 | ||||
|   // aggiunti alla fine del ciclo, scorrendo tutte le righe generate.
 | ||||
|   TAssoc_array corr_ann; | ||||
|   _CorrItem cx; | ||||
|   bool is_key; | ||||
|    | ||||
|   while ((tmpatt = atts.get()) != NULL) | ||||
|   { | ||||
| @ -571,6 +576,15 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt) | ||||
|         } | ||||
|         else  // vendita
 | ||||
|         { | ||||
|           is_key =  corr_ann.is_key(codiva); | ||||
|           cx._totale = 0; | ||||
|           _CorrItem& ca = is_key ? (_CorrItem&) corr_ann[codiva] : cx; | ||||
|           ca._totale += _pim->get_real("R3"); | ||||
|           if (!is_key) // se non c'e' lo aggiunge
 | ||||
|           { | ||||
|             ca._aliquota = _iva->get_real("R0")/CENTO; // Se e' nuovo setta l'aliquota
 | ||||
|             corr_ann.add(codiva,ca); | ||||
|           } | ||||
|           // vedi corrispettivi veri e falsi
 | ||||
|           real cvi = _pim->get_real("R0");  // imp. totale
 | ||||
|           real cvv = _pim->get_real("R1");  // iva  totale
 | ||||
| @ -653,6 +667,23 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt) | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|     real impc,ivac; // Aggiunge lo scorporo dei corrispettivi
 | ||||
|     const int ditems = _descr_arr.items();  | ||||
|     for (int i=0;i<ditems;i++) // scorre le righe memorizzate
 | ||||
|     { | ||||
|       _DescrItem& dd = (_DescrItem&) _descr_arr[i];  | ||||
|       if (dd._flags != PIM_ROW) continue; | ||||
|       if (corr_ann.is_key(dd._s1)) // Se esiste il codice iva corrispondente sull'array corrispettivi
 | ||||
|       { | ||||
|         _CorrItem& cc = (_CorrItem &) corr_ann[dd._s1]; | ||||
|         lordo2netto(cc._totale,impc,ivac,cc._aliquota); | ||||
|         dd._r2 += impc; // allora effettua lo scorporo e aggiorna i totali
 | ||||
|         dd._r3 += ivac; | ||||
|         t2 += impc; | ||||
|         t3 += ivac; | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|     look_plm(month,att); | ||||
|     real iva74t = _pom->get_real("R13");   | ||||
|     if (iva74t.sign() > 0) | ||||
| @ -672,7 +703,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt) | ||||
|   } | ||||
|    | ||||
|   if (art40.sign() > 0 || art40_iva.sign() > 0) | ||||
|   { | ||||
|   {  | ||||
|     _DescrItem* ads = new _DescrItem(PIM_ROW); | ||||
|     ads->_s0 = ref; | ||||
|     ads->_s1 = "A13"; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user