// classpim.h
// funzioni ed enum per classificare i pim    

#ifndef __CGPIM_H
#define __CGPIM_H

#ifndef __ISAM_H
class TRectype;
#endif

#ifndef __REAL_H
#include <real.h>
#endif


// per ora ci si fotte di agenzie viaggio e di
// regimi agricoli                                                              

enum tiporec { acq_norm = 0, vend_norm = 1,   // acquisti e vendite normali
               acq_simp = 2, vend_simp  = 3,  // acq. e vend. sosp. imposta
               bolle_doganali           = 4,  // bolle doganali (acquisti)
               acq_beni_riv             = 5,  // acq. beni per rivendita
               base_ventilazione        = 6,  // base calcolo per ventil.
               corr_norm = 7, corr_simp = 8,  // corrispettivi n. e s. imp.
               acq_beni_ammort          = 9,  // acq. beni ammortizz. detr.
               acq_beni_ammort_nd       = 10, // beni ammort. non detraibili
               acq_beni_leasing         = 11, // beni strum. acq in leasing
               acq_amm_ultdetr          = 12, // beni amm. ult. detr 6%
               acq_ind_op_es            = 13, // acq. indetr. su op.es.
               acq_ind_pass_int         = 14, // passaggi interni
               acq_ind_art_19           = 15, // indetr. art. 19
               cess_amm                 = 16, // cessioni amministrative
               vend_rimborso            = 17, // vendite valide per rimborso
               acq_rimborso             = 18, // acq. validi per rimborso                 
               acq_bd_ind_art_19        = 19  // acq. con tipo documento BD e tipo detr 9
                 // ACHTUNG: se si aggiunge, cambiare sotto!!!
               };

// questo serve nel cpp ma lo metto qua se no
// non lo cambiero' mai quando serve                  
const int MAX_TIPOREC = 19;

// --------------------------------------------------------------- 
// "classifica" un record progressivo IVA passato per reference
// mette l'imponibile in imp, l'imposta in iva, e in t mette 
// un valore dell'enum di cui sopra, che dice di che tipo e'
// l'importo ritornato   
// ---------------------------------------------------------------
// RITORNA TRUE SE VA CHIAMATA ANCORA CON LO STESSO PIM come
// parametro (ovvero: ci sono altri valori da passare che fanno
// parte dello stesso pim)                                      
// ---------------------------------------------------------------           
// mese, anno, attivita' vanno gestiti esternamente. Quando un pim
// contiene dati che valgono per piu' di un caso, ritorna TRUE 
// finche' i casi possibili non sono esauriti
// ---------------------------------------------------------------      

// ------------------------------- ESEMPIO che fa sempre bene 
// TTable pim("PIM");
// while (pim.first(); !pim.eof(); pim.next())
// {
//    real    imponibile, imposta;
//    tiporec tipo;
//             
//    // Escludi i pim che non vuoi (per attivita', anno, mese)
//    if (questo_non_lo_volevo) continue; 
//  
//
//    while (classify_pim(pim.curr(), imponibile, imposta, tipo))
//    {
//      switch(tipo)
//      { 
//         case acq_norm:
//            acq_imponibile += imponibile;
//            acq_imposta    += imposta;
//            break;
//         // eccetera
//      }
//    }
// }                  
//
// CONTENTA?                                       ciao, f. :)
// -----------------------------------------------------------

bool classify_pim(TRectype& pimr, real& imp, real& iva, tiporec& t, bool ts);

#endif