Patch level :10.0
Files correlati : Ricompilazione Demo : [ ] Commento :riporto gestione ripartizioni interattive per conversione git-svn-id: svn://10.65.10.50/trunk@17147 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									5a12bb43ba
								
							
						
					
					
						commit
						d12d45d52e
					
				@ -80,24 +80,6 @@ bool TRiparti_msk::on_field_event(TOperable_field& o, TField_event e, long jolly
 | 
			
		||||
        return error_box(TR("Il totale delle percentuali di riparto deve essere 100"));
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
  case F_SHEET:
 | 
			
		||||
    if (e == fe_init)
 | 
			
		||||
    {
 | 
			
		||||
      TSheet_field& sf = sfield(F_SHEET);
 | 
			
		||||
      TMask& sm = sf.sheet_mask();
 | 
			
		||||
      const bool on = get(F_TIPO)[0] != 'C';
 | 
			
		||||
      for (short id = 202; id < 214; id++)
 | 
			
		||||
      {
 | 
			
		||||
        if (sm.id2pos(id) > 0)
 | 
			
		||||
        {
 | 
			
		||||
          sf.enable_column(id, on);
 | 
			
		||||
          sm.enable(id, on);
 | 
			
		||||
        }
 | 
			
		||||
        if (sm.id2pos(id+50) > 0)
 | 
			
		||||
          sm.enable(id+50, on);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
  case F_GENFASI:
 | 
			
		||||
    if (e == fe_init)
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										29
									
								
								ca/ca0800a.h
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								ca/ca0800a.h
									
									
									
									
									
								
							@ -1,19 +1,24 @@
 | 
			
		||||
#define F_TIPO       101
 | 
			
		||||
#define F_CODICE_I   102
 | 
			
		||||
#define F_CODICE_B   103
 | 
			
		||||
#define F_DESCRIZ_I  104
 | 
			
		||||
#define F_DESCRIZ_B  105
 | 
			
		||||
#define F_TIPORIP    106
 | 
			
		||||
#define F_LEVEL_1    107
 | 
			
		||||
#define F_LEVEL_2    108
 | 
			
		||||
//le define commentate per ora non servono ma in futuro forse si (segnaposto)
 | 
			
		||||
//#define F_CODICE_P   104
 | 
			
		||||
//#define F_CODICE_C   105
 | 
			
		||||
#define F_DESCRIZ_I  106
 | 
			
		||||
#define F_DESCRIZ_B  107
 | 
			
		||||
//#define F_DESCRIZ_P  108
 | 
			
		||||
//#define F_DESCRIZ_C  109
 | 
			
		||||
#define F_TIPORIP    110
 | 
			
		||||
#define F_LEVEL_1    111
 | 
			
		||||
#define F_LEVEL_2    112
 | 
			
		||||
 | 
			
		||||
#define F_GRUPPO     111
 | 
			
		||||
#define F_CONTO      112 
 | 
			
		||||
#define F_SOTTOCONTO 113
 | 
			
		||||
#define F_DESCR      114
 | 
			
		||||
#define F_ANNOES     115
 | 
			
		||||
#define F_INDBIL     116
 | 
			
		||||
#define F_CLASSEMOV  117
 | 
			
		||||
#define F_GRUPPO     113
 | 
			
		||||
#define F_CONTO      114 
 | 
			
		||||
#define F_SOTTOCONTO 115
 | 
			
		||||
#define F_DESCR      116
 | 
			
		||||
#define F_ANNOES     117
 | 
			
		||||
#define F_INDBIL     118
 | 
			
		||||
#define F_CLASSEMOV  119
 | 
			
		||||
 | 
			
		||||
#define F_CODCDC_1   121
 | 
			
		||||
#define F_CODCDC_2   122
 | 
			
		||||
 | 
			
		||||
@ -18,10 +18,10 @@ BEGIN
 | 
			
		||||
  FLAGS "ZP"
 | 
			
		||||
  ITEM "I|Interattiva"
 | 
			
		||||
    MESSAGE SHOW,1@|HIDE,2@
 | 
			
		||||
  ITEM "C|Conversione"
 | 
			
		||||
    MESSAGE SHOW,1@|HIDE,2@
 | 
			
		||||
  ITEM "B|Batch"
 | 
			
		||||
    MESSAGE SHOW,2@|HIDE,1@
 | 
			
		||||
  ITEM "P|Pareggio"
 | 
			
		||||
    MESSAGE SHOW,1@|HIDE,2@
 | 
			
		||||
  FIELD TIPO
 | 
			
		||||
  KEY 1
 | 
			
		||||
END
 | 
			
		||||
@ -56,8 +56,8 @@ BEGIN
 | 
			
		||||
  DISPLAY "Codice@8 " CODICE
 | 
			
		||||
  DISPLAY "Costo@20" CODCOSTO
 | 
			
		||||
  DISPLAY "Commessa@20" CODCMS
 | 
			
		||||
  DISPLAY "Fase@10" CODFASE
 | 
			
		||||
  DISPLAY "Descrizione@50" DESCRIZ
 | 
			
		||||
  DISPLAY "Fase@10" CODFASE
 | 
			
		||||
  OUTPUT F_CODICE_B CODICE
 | 
			
		||||
  OUTPUT F_DESCRIZ_B DESCRIZ
 | 
			
		||||
  CHECKTYPE REQUIRED
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										246
									
								
								ca/ca2200.cpp
									
									
									
									
									
								
							
							
						
						
									
										246
									
								
								ca/ca2200.cpp
									
									
									
									
									
								
							@ -24,63 +24,10 @@ class TRib_movanal_msk : public TAnal_report_mask
 | 
			
		||||
protected:
 | 
			
		||||
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
			
		||||
 | 
			
		||||
  void save_to_ini();
 | 
			
		||||
  void load_from_ini();
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  TRib_movanal_msk();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void TRib_movanal_msk::save_to_ini()
 | 
			
		||||
{
 | 
			
		||||
  TConfig ini(CONFIG_DITTA, "ca");
 | 
			
		||||
 | 
			
		||||
  // Cancella tutte le variabili di pareggio
 | 
			
		||||
  int j;
 | 
			
		||||
  for (j = 1; ini.remove("Pareggio", j); j++);
 | 
			
		||||
 | 
			
		||||
  TSheet_field& sf = sfield(F_RIGHE);
 | 
			
		||||
  const int idx = sf.cid2index(F_CODCAUS);
 | 
			
		||||
 | 
			
		||||
  // Salva tutte le righe dello sheet nel formato
 | 
			
		||||
  // Pareggio(1) = Causale|Costo|Commessa|Fase
 | 
			
		||||
  j = 0;
 | 
			
		||||
  FOR_EACH_SHEET_ROW(sf, i, row) 
 | 
			
		||||
  {
 | 
			
		||||
    TToken_string par = row->get(idx);  // Codice causale
 | 
			
		||||
    if (!par.blank())
 | 
			
		||||
    {
 | 
			
		||||
      TAnal_bill bill;
 | 
			
		||||
      const int flags = get_row_bill(sf, i, bill);
 | 
			
		||||
      if (flags != 0)
 | 
			
		||||
      {
 | 
			
		||||
        if (flags & 1) par.add(bill.costo(),    1);
 | 
			
		||||
        if (flags & 2) par.add(bill.commessa(), 2);
 | 
			
		||||
        if (flags & 4) par.add(bill.fase(),     3);
 | 
			
		||||
        ini.set("Pareggio", par, NULL, true, ++j);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TRib_movanal_msk::load_from_ini()
 | 
			
		||||
{
 | 
			
		||||
  // Svuota lo sheet
 | 
			
		||||
  TSheet_field& sf = sfield(F_RIGHE);
 | 
			
		||||
  sf.destroy();
 | 
			
		||||
 | 
			
		||||
  // Carica tutte le variabili di pareggio nello sheet
 | 
			
		||||
  TConfig ini(CONFIG_DITTA, "ca");
 | 
			
		||||
  TToken_string par;
 | 
			
		||||
  for (int j = 1; ; j++)
 | 
			
		||||
  {
 | 
			
		||||
    par = ini.get("Pareggio", NULL, j);
 | 
			
		||||
    if (par.empty_items())
 | 
			
		||||
      break;
 | 
			
		||||
    const TAnal_bill bill("", par.get(1), par.get(2), par.get(3));
 | 
			
		||||
    set_row_bill(sf, -1, bill);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TRib_movanal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
			
		||||
{
 | 
			
		||||
@ -98,11 +45,7 @@ bool TRib_movanal_msk::on_field_event(TOperable_field& o, TField_event e, long j
 | 
			
		||||
				return error_box(TR("La data deve appartenere all'anno selezionato"));
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
  case DLG_OK: 
 | 
			
		||||
  case DLG_SAVEREC: 
 | 
			
		||||
    if (e == fe_button)
 | 
			
		||||
      save_to_ini(); 
 | 
			
		||||
    break;
 | 
			
		||||
 | 
			
		||||
  default: 
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
@ -111,8 +54,6 @@ bool TRib_movanal_msk::on_field_event(TOperable_field& o, TField_event e, long j
 | 
			
		||||
 | 
			
		||||
TRib_movanal_msk::TRib_movanal_msk() : TAnal_report_mask("ca2200a")
 | 
			
		||||
{
 | 
			
		||||
  create_sheet(F_RIGHE);
 | 
			
		||||
  load_from_ini();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//--------------------------------------------------------------------
 | 
			
		||||
@ -122,45 +63,66 @@ class TRib_movanal_app : public TSkeleton_application
 | 
			
		||||
{
 | 
			
		||||
  TCache_ripartizioni _cache_rip;
 | 
			
		||||
  bool _definitivo;
 | 
			
		||||
  TAssoc_array _caus_cms;
 | 
			
		||||
 | 
			
		||||
  virtual const char* extra_modules() const { return "cm"; } //deve funzionare anche per le commesse
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
  virtual void main_loop();
 | 
			
		||||
 | 
			
		||||
  bool explode_rows(const TRecord_array& input_rows, TRecord_array& output_rows, const int annoes, 
 | 
			
		||||
                    const char tipomov);
 | 
			
		||||
  bool pareggia_commessa(TAnal_mov& anal_mov);
 | 
			
		||||
  bool elabora_righe(TAnal_mov& anal_mov, const TRecord_array& input_rows, TRecord_array& output_rows);
 | 
			
		||||
  bool ripartizione(const TAnal_ripartizioni_batch& rrip, const TRectype& rec, TRecord_array& output_rows);
 | 
			
		||||
  bool pareggio(TAnal_mov& anal_mov, const TAnal_ripartizioni_batch& rrip, const TRectype& rec, TRecord_array& output_rows);
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  bool elabora_movimento(TAnal_mov& anal_mov, const bool esplodi);
 | 
			
		||||
	TRib_movanal_app(){}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
bool TRib_movanal_app::explode_rows(const TRecord_array& input_rows, TRecord_array& output_rows, 
 | 
			
		||||
                                    const int annoes, const char tipomov)
 | 
			
		||||
{
 | 
			
		||||
  bool ho_cambiato_qualchecosa = false;
 | 
			
		||||
  for (int r = 1; r <= input_rows.rows(); r++)
 | 
			
		||||
  {
 | 
			
		||||
    const TRectype& rec = input_rows.row(r);
 | 
			
		||||
    TAnal_bill zio(rec);
 | 
			
		||||
    const int rmovana_indbil = zio.indicatore_bilancio();
 | 
			
		||||
    const TAnal_ripartizioni_batch& rrip = _cache_rip.righe(rec.get(RMOVANA_CODCCOSTO), rec.get(RMOVANA_CODCMS),
 | 
			
		||||
                                                            rec.get(RMOVANA_CODFASE), annoes, rmovana_indbil, tipomov);
 | 
			
		||||
    //ci sono righe di ripartizione
 | 
			
		||||
    const int righe_ripartizione = rrip.rows();
 | 
			
		||||
    bool ripartisci = righe_ripartizione > 0;
 | 
			
		||||
 | 
			
		||||
    if (ripartisci)  
 | 
			
		||||
bool TRib_movanal_app::pareggio(TAnal_mov& anal_mov, const TAnal_ripartizioni_batch& rrip, const TRectype& rec, 
 | 
			
		||||
                                TRecord_array& output_rows)
 | 
			
		||||
{
 | 
			
		||||
  bool ho_pareggiato = false;
 | 
			
		||||
 | 
			
		||||
  TImporto totdoc(anal_mov.get_char(MOVANA_SEZIONE), anal_mov.get_real(MOVANA_TOTDOC));
 | 
			
		||||
 | 
			
		||||
  const TImporto imp_riga(rec.get_char(RMOVANA_SEZIONE), rec.get_real(RMOVANA_IMPORTO));
 | 
			
		||||
 | 
			
		||||
  totdoc -= imp_riga;
 | 
			
		||||
  totdoc.normalize();
 | 
			
		||||
  anal_mov.put(MOVANA_TOTDOC, totdoc.valore());
 | 
			
		||||
  anal_mov.put(MOVANA_SEZIONE, totdoc.sezione());
 | 
			
		||||
 | 
			
		||||
  //aggiunge la riga originale alle righe di output (e' un pareggio)
 | 
			
		||||
  const int original_nriga = output_rows.rows() + 1;
 | 
			
		||||
  TRectype* newrec = new TRectype(rec);
 | 
			
		||||
  newrec->put(RMOVANA_NUMRIG, original_nriga);
 | 
			
		||||
  output_rows.add_row(newrec);
 | 
			
		||||
 | 
			
		||||
  //swappa la sezione e la manda al ripartitore in modo da generare righe con la sezione rovesciata rispetto a quella..
 | 
			
		||||
  //..originale ed ottenere cosi' il pareggio
 | 
			
		||||
  TRectype swaprec(rec);
 | 
			
		||||
  swaprec.put(RMOVANA_SEZIONE, imp_riga.sezione() == 'D' ? 'A' : 'D');
 | 
			
		||||
  ho_pareggiato = ripartizione(rrip, swaprec, output_rows);
 | 
			
		||||
 | 
			
		||||
  //elimina il codcontoori da tutte le righe aggiunte per il pareggio
 | 
			
		||||
  for (int i = output_rows.rows(); i > original_nriga; i--)
 | 
			
		||||
    output_rows.row(i, false).zero(RMOVANA_CODCONTORI);
 | 
			
		||||
 | 
			
		||||
  return ho_pareggiato;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool TRib_movanal_app::ripartizione(const TAnal_ripartizioni_batch& rrip, const TRectype& rec, TRecord_array& output_rows)
 | 
			
		||||
{
 | 
			
		||||
  bool ho_ripartito = false;
 | 
			
		||||
  // Importo totale da distribuire arrotondato ai decimali della valuta di conto
 | 
			
		||||
  TGeneric_distrib distrib(rec.get_real(RMOVANA_IMPORTO), TCurrency::get_firm_dec());
 | 
			
		||||
 | 
			
		||||
  // Calcolo tutte le percentuali da ripartire
 | 
			
		||||
  int i;
 | 
			
		||||
      for (i = 1; i <= righe_ripartizione; i++)
 | 
			
		||||
  const int righe_ripartizione = rrip.rows();
 | 
			
		||||
  for (i = 1; i <= rrip.rows(); i++)
 | 
			
		||||
    distrib.add(rrip[i].get_real(RRIP_RIPARTO));
 | 
			
		||||
 | 
			
		||||
  for (i = 1; i <= righe_ripartizione; i++)
 | 
			
		||||
@ -184,69 +146,62 @@ bool TRib_movanal_app::explode_rows(const TRecord_array& input_rows, TRecord_arr
 | 
			
		||||
		  ca_copia_campo(rrip[i], RRIP_CODCONTO, *newrec, RMOVANA_CODCONTO);
 | 
			
		||||
 | 
			
		||||
		  output_rows.add_row(newrec);
 | 
			
		||||
	        ho_cambiato_qualchecosa = true;
 | 
			
		||||
      ho_ripartito = true;
 | 
			
		||||
	  } //if(imp!=ZERO)...
 | 
			
		||||
  } //for(i=1;i<=righe_ripartizione...
 | 
			
		||||
 | 
			
		||||
  return ho_ripartito;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool TRib_movanal_app::elabora_righe(TAnal_mov& anal_mov, const TRecord_array& input_rows, TRecord_array& output_rows)
 | 
			
		||||
{
 | 
			
		||||
  bool ho_cambiato_qualchecosa = false;
 | 
			
		||||
 | 
			
		||||
  const int annoes = anal_mov.get_int(MOVANA_ANNOES);
 | 
			
		||||
  const char tipomov = anal_mov.get_char(MOVANA_TIPOMOV);
 | 
			
		||||
 | 
			
		||||
  for (int r = 1; r <= input_rows.rows(); r++)
 | 
			
		||||
  {
 | 
			
		||||
    const TRectype& rec = input_rows.row(r);
 | 
			
		||||
    TAnal_bill zio(rec);
 | 
			
		||||
    const int rmovana_indbil = zio.indicatore_bilancio();
 | 
			
		||||
 | 
			
		||||
    //ripartizione batch: passa il conto perche' per prima cosa provera' una ripartizione di tipo 'P' con chiave 3; se non..
 | 
			
		||||
    //..ci riuscira', provera' da solo (metodi della TCache_ripartizioni) le ripartizioni di tipo 'B' con chiave 4.
 | 
			
		||||
    const TAnal_ripartizioni_batch& rrip = _cache_rip.righe(zio, annoes, rmovana_indbil, tipomov);
 | 
			
		||||
    const char tiporip = rrip.tiporip();
 | 
			
		||||
 | 
			
		||||
    //ci sono righe di ripartizione
 | 
			
		||||
    const int righe_ripartizione = rrip.rows();
 | 
			
		||||
    bool ripartisci = righe_ripartizione > 0;
 | 
			
		||||
 | 
			
		||||
    //se ci sono righe di ripartizione/pareggio si va a ripartire!
 | 
			
		||||
    if (ripartisci)  
 | 
			
		||||
    {
 | 
			
		||||
      switch (tiporip)
 | 
			
		||||
      {
 | 
			
		||||
      //procedura di ripartizione batch 'B' originale; se tiporip=='P' invece ci vuole il pareggio del movana
 | 
			
		||||
      case 'B':
 | 
			
		||||
        ho_cambiato_qualchecosa = ripartizione(rrip, rec, output_rows);
 | 
			
		||||
        break;
 | 
			
		||||
      case 'P':
 | 
			
		||||
        ho_cambiato_qualchecosa = pareggio(anal_mov, rrip, rec, output_rows);
 | 
			
		||||
        break;
 | 
			
		||||
      default:
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    }
 | 
			
		||||
    else  //nessuna riga di ripartizione->aggiungo la riga input all'output
 | 
			
		||||
    else  //if(ripartisci...   nessuna riga di ripartizione->aggiungo la riga input all'output
 | 
			
		||||
    {
 | 
			
		||||
      TRectype* newrec = new TRectype(rec);
 | 
			
		||||
      newrec->put(RMOVANA_NUMRIG, output_rows.rows() + 1);
 | 
			
		||||
      output_rows.add_row(newrec);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  } //for(int r=1; r<=input_rows.rows()...
 | 
			
		||||
  return ho_cambiato_qualchecosa;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TRib_movanal_app::pareggia_commessa(TAnal_mov& anal_mov)
 | 
			
		||||
{
 | 
			
		||||
  bool ho_cambiato_qualchecosa = false;
 | 
			
		||||
 | 
			
		||||
  const TString& codcaus = anal_mov.get(MOVANA_CODCAUS);
 | 
			
		||||
  const TAnal_bill* cms = (const TAnal_bill*)_caus_cms.objptr(codcaus);
 | 
			
		||||
  if (cms != NULL) // La causale del movimento e' tra quelle da pareggiare
 | 
			
		||||
  {
 | 
			
		||||
    const TImporto totdoc(anal_mov.get_char(MOVANA_SEZIONE), anal_mov.get_real(MOVANA_TOTDOC));
 | 
			
		||||
    if (!totdoc.is_zero()) // Movimento da pareggiare
 | 
			
		||||
    {
 | 
			
		||||
      TRecord_array& body = anal_mov.body();
 | 
			
		||||
      // Cerco la commessa/fase/costo tra le righe esistenti
 | 
			
		||||
      int i;
 | 
			
		||||
      for (i = body.last_row(); i > 0; i--)
 | 
			
		||||
      {
 | 
			
		||||
        const TRectype& row = body[i];
 | 
			
		||||
        if ((cms->costo().blank() || row.get(RMOVANA_CODCCOSTO) == cms->costo()) &&
 | 
			
		||||
            (cms->commessa().blank() || row.get(RMOVANA_CODCMS) == cms->commessa()) &&           
 | 
			
		||||
            (cms->fase().blank() || row.get(RMOVANA_CODFASE) == cms->fase()))
 | 
			
		||||
          break;
 | 
			
		||||
      }
 | 
			
		||||
      // Se non trovo nessuna riga compatibile, me la creo
 | 
			
		||||
      if (i <= 0)
 | 
			
		||||
      {
 | 
			
		||||
        TRectype& rmovana = anal_mov.new_row();
 | 
			
		||||
        rmovana.put(RMOVANA_DESCR, TR("Pareggio commessa"));
 | 
			
		||||
        rmovana.put(RMOVANA_CODCCOSTO, cms->costo());
 | 
			
		||||
        rmovana.put(RMOVANA_CODCMS,    cms->commessa());
 | 
			
		||||
        rmovana.put(RMOVANA_CODFASE,   cms->fase());
 | 
			
		||||
        i = rmovana.get_int(RMOVANA_NUMRIG);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // Sottraggo all'importo della riga il totale documento, 
 | 
			
		||||
      // il quale verra' quindi azzerato
 | 
			
		||||
      TRectype& rmovana = body[i];
 | 
			
		||||
      TImporto importo(rmovana.get_char(RMOVANA_SEZIONE), rmovana.get_real(RMOVANA_IMPORTO));
 | 
			
		||||
      importo -= totdoc;
 | 
			
		||||
      importo.normalize();
 | 
			
		||||
      rmovana.put(RMOVANA_SEZIONE, importo.sezione());
 | 
			
		||||
      rmovana.put(RMOVANA_IMPORTO, importo.valore());
 | 
			
		||||
      anal_mov.put(MOVANA_TOTDOC, ZERO);
 | 
			
		||||
 | 
			
		||||
      ho_cambiato_qualchecosa = true;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  return ho_cambiato_qualchecosa;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TRib_movanal_app::elabora_movimento(TAnal_mov& anal_mov, const bool esplodi)
 | 
			
		||||
{
 | 
			
		||||
@ -266,13 +221,11 @@ bool TRib_movanal_app::elabora_movimento(TAnal_mov& anal_mov, const bool esplodi
 | 
			
		||||
    output_rows.destroy_rows();             //..e poi lo pulisce
 | 
			
		||||
 | 
			
		||||
    //Esploditore
 | 
			
		||||
    if (explode_rows(compact_rows, output_rows, anal_mov.get_int(MOVANA_ANNOES), anal_mov.get_char(MOVANA_TIPOMOV)))
 | 
			
		||||
    if (elabora_righe(anal_mov, compact_rows, output_rows))
 | 
			
		||||
    {
 | 
			
		||||
      input_rows = output_rows; //rimette i record elaborati negli originali
 | 
			
		||||
      do_rewrite = true;
 | 
			
		||||
    }
 | 
			
		||||
    if (pareggia_commessa(anal_mov))
 | 
			
		||||
      do_rewrite = true;
 | 
			
		||||
    
 | 
			
		||||
    if (_definitivo)  //se l'elaborazione e' definitiva...
 | 
			
		||||
    {
 | 
			
		||||
@ -285,8 +238,12 @@ bool TRib_movanal_app::elabora_movimento(TAnal_mov& anal_mov, const bool esplodi
 | 
			
		||||
    //Imploditore
 | 
			
		||||
    do_rewrite = ca_implode_rows(input_rows, compact_rows);
 | 
			
		||||
    if (do_rewrite)
 | 
			
		||||
    {
 | 
			
		||||
      input_rows = compact_rows; // rimette i record compattati negli originali
 | 
			
		||||
      anal_mov.update_totdoc();   //aggiorna il totale movana (necessarip per ripartizioni a pareggio, di sicurezza per le altre)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return do_rewrite; //se ha elaborato delle righe e/o e' una elaborazione definitiva, riscrive la..
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -348,23 +305,6 @@ void TRib_movanal_app::main_loop()
 | 
			
		||||
      //Presa la decisione si parte! Tenetevi forte...
 | 
			
		||||
      if (run)
 | 
			
		||||
      {
 | 
			
		||||
        // Riempie la lista della causali dei movimenti da pareggiare
 | 
			
		||||
        _caus_cms.destroy();
 | 
			
		||||
        TSheet_field& sf = mask.sfield(F_RIGHE);
 | 
			
		||||
        const int pos_codcaus = sf.cid2index(F_CODCAUS);
 | 
			
		||||
        FOR_EACH_SHEET_ROW(sf, i, row) 
 | 
			
		||||
        {
 | 
			
		||||
          const TString4 codcaus = row->get(pos_codcaus);
 | 
			
		||||
          if (codcaus.full())
 | 
			
		||||
          {
 | 
			
		||||
            TAnal_bill* bill = new TAnal_bill;
 | 
			
		||||
            if (mask.get_row_bill(sf, i, *bill) != 0)
 | 
			
		||||
              _caus_cms.add(codcaus, bill);
 | 
			
		||||
            else
 | 
			
		||||
              delete bill;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (compattazione)
 | 
			
		||||
          cur_movana.scan(compatta_callback, this, TR("Compattamento movimenti..."));
 | 
			
		||||
        else
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,6 @@
 | 
			
		||||
#define F_DEFINITIVO  203
 | 
			
		||||
#define F_ANNO        204
 | 
			
		||||
#define F_COMPATTA    205
 | 
			
		||||
#define F_RIGHE       300
 | 
			
		||||
//Devono valere un numero piu' alto di S_CDC12 (che attualmente e' 112) senno' non nascono in fila nello..
 | 
			
		||||
//..sheet
 | 
			
		||||
#define F_CODCAUS     113
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										156
									
								
								ca/ca2200a.uml
									
									
									
									
									
								
							
							
						
						
									
										156
									
								
								ca/ca2200a.uml
									
									
									
									
									
								
							@ -83,162 +83,6 @@ BEGIN
 | 
			
		||||
  PROMPT 2 7 "Blocca movimenti elaborati (DEFINITIVO e vale solo per ripartizione)"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
TEXT -1
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 1 9 "@bCommesse/CdC da pareggiare"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
SPREADSHEET F_RIGHE -1 -1
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 1 10 ""
 | 
			
		||||
  ITEM "Cms 1"
 | 
			
		||||
  ITEM "Cms 2"
 | 
			
		||||
  ITEM "Cms 3"
 | 
			
		||||
  ITEM "Cms 4"
 | 
			
		||||
  ITEM "Cms 5"
 | 
			
		||||
  ITEM "Cms 6"
 | 
			
		||||
  ITEM "Cms 7"
 | 
			
		||||
  ITEM "Cms 8"
 | 
			
		||||
  ITEM "Cms 9"
 | 
			
		||||
  ITEM "Cms 10"
 | 
			
		||||
  ITEM "Cms 11"
 | 
			
		||||
  ITEM "Cms 12"
 | 
			
		||||
  ITEM "Causale"
 | 
			
		||||
  ITEM "Descrizione@50"
 | 
			
		||||
END
 | 
			
		||||
  
 | 
			
		||||
ENDPAGE
 | 
			
		||||
 | 
			
		||||
ENDMASK
 | 
			
		||||
 | 
			
		||||
PAGE "Riga Commesse/CdC da pareggiare" -1 -1 78 15
 | 
			
		||||
 | 
			
		||||
STRING F_CODCAUS 3
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 1 0 "Causale  "
 | 
			
		||||
  USE LF_CAUSALI SELECT MOVIND!=""
 | 
			
		||||
  INPUT CODCAUS F_CODCAUS
 | 
			
		||||
  DISPLAY "Codice" CODCAUS
 | 
			
		||||
  DISPLAY "Descrizione@50" DESCR
 | 
			
		||||
  OUTPUT F_CODCAUS CODCAUS
 | 
			
		||||
  OUTPUT F_DESCAUS DESCR
 | 
			
		||||
  CHECKTYPE NORMAL
 | 
			
		||||
  ADD RUN cg0 -4
 | 
			
		||||
  FLAGS "U"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
STRING F_DESCAUS 50
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 23 0 ""
 | 
			
		||||
  USE LF_CAUSALI KEY 2 SELECT MOVIND!=""
 | 
			
		||||
  INPUT DESCR F_DESCAUS
 | 
			
		||||
  DISPLAY "Descrizione@50" DESCR
 | 
			
		||||
  DISPLAY "Codice" CODCAUS
 | 
			
		||||
  COPY OUTPUT F_CODCAUS
 | 
			
		||||
  ADD RUN cg0 -4
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
//Non cancellare GROUP 1 dai 12 campi successivi, pena la comparsa di campi inutili e perniciosi nella
 | 
			
		||||
//maschera di riga
 | 
			
		||||
STRING S_CDC1 20
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 1 2 "Cms1 "
 | 
			
		||||
  FLAGS "B"
 | 
			
		||||
  GROUP 1
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
STRING S_CDC2 20
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 1 3 "Cms2 "
 | 
			
		||||
  FLAGS "B"
 | 
			
		||||
  GROUP 1
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
STRING S_CDC3 20
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 1 4 "Cms3 "
 | 
			
		||||
  FLAGS "B"
 | 
			
		||||
  GROUP 1
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
STRING S_CDC4 20
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 1 5 "Cms4 "
 | 
			
		||||
  FLAGS "B"
 | 
			
		||||
  GROUP 1
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
STRING S_CDC5 20
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 1 6 "Cms5 "
 | 
			
		||||
  FLAGS "B"
 | 
			
		||||
  GROUP 1
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
STRING S_CDC6 20
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 1 7 "Cms6 "
 | 
			
		||||
  FLAGS "B"
 | 
			
		||||
  GROUP 1
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
STRING S_CDC7 20
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 1 8 "Cms7 "
 | 
			
		||||
  FLAGS "B"
 | 
			
		||||
  GROUP 1
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
STRING S_CDC8 20
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 1 9 "Cms8 "
 | 
			
		||||
  FLAGS "B"
 | 
			
		||||
  GROUP 1
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
STRING S_CDC9 20
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 1 10 "Cms9 "
 | 
			
		||||
  FLAGS "B"
 | 
			
		||||
  GROUP 1
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
STRING S_CDC10 20
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 1 11 "Cms10 "
 | 
			
		||||
  FLAGS "B"
 | 
			
		||||
  GROUP 1
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
STRING S_CDC11 20
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 1 12 "Cms11 "
 | 
			
		||||
  FLAGS "B"
 | 
			
		||||
  GROUP 1
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
STRING S_CDC12 20
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 1 13 "Cms12 "
 | 
			
		||||
  FLAGS "B"
 | 
			
		||||
  GROUP 1
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
BUTTON DLG_OK 10 2
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT -13 -1 ""
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
BUTTON DLG_DELREC 10 2
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT -23 -1 ""
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
BUTTON DLG_CANCEL 10 2
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT -33 -1 ""
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
ENDPAGE
 | 
			
		||||
 | 
			
		||||
ENDMASK
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										55
									
								
								ca/cacnv.cpp
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								ca/cacnv.cpp
									
									
									
									
									
								
							@ -471,31 +471,7 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss
 | 
			
		||||
    //Per prima cosa crea l'array delle righe di ripartizione con questo gr/co/stc/annoes
 | 
			
		||||
		const int annoes = mov_head.get_int(MOV_ANNOES);
 | 
			
		||||
    
 | 
			
		||||
    if (ca_config().get_bool("UsePdcc"))  //solo se in CA si usa il piano dei conti contabile..
 | 
			
		||||
    {                                       //..e' possibile costruire la riga movimento
 | 
			
		||||
      //Compila la riga del movimentodi analitica
 | 
			
		||||
      TRectype& analriga = analmov.new_row();
 | 
			
		||||
 | 
			
		||||
      analriga.put(RMOVANA_SEZIONE, importo.sezione());
 | 
			
		||||
      analriga.put(RMOVANA_IMPORTO, importo.valore());
 | 
			
		||||
      analriga.put(RMOVANA_DESCR, importo.descrizione());
 | 
			
		||||
 | 
			
		||||
      analriga.put(RMOVANA_ANNOES, analmov.get(MOVANA_ANNOES));
 | 
			
		||||
      analriga.put(RMOVANA_DATACOMP, analmov.get(MOVANA_DATAREG));
 | 
			
		||||
 | 
			
		||||
      analriga.put(RMOVANA_CODCMS, chiave.get(0));
 | 
			
		||||
      analriga.put(RMOVANA_CODFASE, chiave.get(1));
 | 
			
		||||
 | 
			
		||||
      TString16 codconto;
 | 
			
		||||
      codconto.format("%03d%03d%06ld", gruppo, conto, sottoconto);
 | 
			
		||||
      analriga.put(RMOVANA_CODCONTO, codconto);
 | 
			
		||||
 | 
			
		||||
      //controlla la coppia fase/(cdc-commessa) e decide se aggiungerla al file delle fasi
 | 
			
		||||
      check_phase(analriga);
 | 
			
		||||
    }
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			const TAnal_ripartizioni_batch& rrip = _cache_rip.righe(zio, annoes, ' ', 'I');
 | 
			
		||||
    const TAnal_ripartizioni_batch& rrip = _cache_rip.righe_interattive(zio, annoes);
 | 
			
		||||
 | 
			
		||||
    const int righe_ripartizione = rrip.rows();
 | 
			
		||||
    const bool ripartisci = righe_ripartizione > 0;
 | 
			
		||||
@ -534,8 +510,33 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss
 | 
			
		||||
        check_phase(analriga);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
			else
 | 
			
		||||
				error_box(TR("Manca la ripartizione di conversione del conto : %d %d %ld"), zio.gruppo(), zio.conto(), zio.sottoconto());
 | 
			
		||||
    else  //nessuna riga ripartizione -> da 1 riga movimento CG ad 1 riga movimento CA
 | 
			
		||||
    {
 | 
			
		||||
      if (ca_config().get_bool("UsePdcc"))  //solo se in CA si usa il piano dei conti contabile..
 | 
			
		||||
      {                                       //..e' possibile costruire la riga movimento
 | 
			
		||||
        //Compila la riga del movimentodi analitica
 | 
			
		||||
        TRectype& analriga = analmov.new_row();
 | 
			
		||||
 | 
			
		||||
        analriga.put(RMOVANA_SEZIONE, importo.sezione());
 | 
			
		||||
        analriga.put(RMOVANA_IMPORTO, importo.valore());
 | 
			
		||||
        analriga.put(RMOVANA_DESCR, importo.descrizione());
 | 
			
		||||
 | 
			
		||||
        analriga.put(RMOVANA_ANNOES, analmov.get(MOVANA_ANNOES));
 | 
			
		||||
        analriga.put(RMOVANA_DATACOMP, analmov.get(MOVANA_DATAREG));
 | 
			
		||||
 | 
			
		||||
        analriga.put(RMOVANA_CODCMS, chiave.get(0));
 | 
			
		||||
        analriga.put(RMOVANA_CODFASE, chiave.get(1));
 | 
			
		||||
 | 
			
		||||
        TString16 codconto;
 | 
			
		||||
        codconto.format("%03d%03d%06ld", gruppo, conto, sottoconto);
 | 
			
		||||
        analriga.put(RMOVANA_CODCONTO, codconto);
 | 
			
		||||
 | 
			
		||||
        //controlla la coppia fase/(cdc-commessa) e decide se aggiungerla al file delle fasi
 | 
			
		||||
        check_phase(analriga);
 | 
			
		||||
      }
 | 
			
		||||
      else  //qui va aggiunta la lista dei conti che non hanno ripartizione quando NON si usa il..
 | 
			
		||||
            //..piano dei conti contabile in analitica
 | 
			
		||||
        error_box(TR("Manca la ripartizione di un conto"));
 | 
			
		||||
    }
 | 
			
		||||
  } //end FOR_EACH..
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										128
									
								
								ca/calib01.cpp
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								ca/calib01.cpp
									
									
									
									
									
								
							@ -1521,6 +1521,21 @@ void TAnal_mov::zero(char c)
 | 
			
		||||
	kill_saldi();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TAnal_mov::update_totdoc()
 | 
			
		||||
{
 | 
			
		||||
  TImporto totdoc;
 | 
			
		||||
  for (int i = rows(); i > 0; i--)
 | 
			
		||||
  {
 | 
			
		||||
    const TRectype& riga = body().row(i); 
 | 
			
		||||
    TImporto imp_riga(riga.get_char(RMOVANA_SEZIONE), riga.get_real(RMOVANA_IMPORTO));
 | 
			
		||||
    totdoc += imp_riga;
 | 
			
		||||
  }
 | 
			
		||||
  totdoc.normalize();
 | 
			
		||||
 | 
			
		||||
  put(MOVANA_TOTDOC, totdoc.valore());
 | 
			
		||||
  put(MOVANA_SEZIONE, totdoc.sezione());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TAnal_mov::TAnal_mov(long numreg) : TMultiple_rectype(LF_MOVANA)
 | 
			
		||||
{
 | 
			
		||||
  add_file(LF_RMOVANA, RMOVANA_NUMRIG);
 | 
			
		||||
@ -1564,7 +1579,12 @@ int TAnal_ripartizioni_batch::indbil() const
 | 
			
		||||
  return head().get_int(RIP_INDBIL); 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int TAnal_ripartizioni_batch::read (const char* codice, char tiporip)
 | 
			
		||||
char TAnal_ripartizioni_batch::tiporip() const
 | 
			
		||||
{
 | 
			
		||||
  return head().get_char(RIP_TIPO);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int TAnal_ripartizioni_batch::read (const char tiporip, const char* codice)
 | 
			
		||||
{
 | 
			
		||||
  TLocalisamfile rip(LF_RIP);
 | 
			
		||||
  _rip.put(RIP_TIPO, tiporip); //solo tipi batch!
 | 
			
		||||
@ -1573,7 +1593,7 @@ int TAnal_ripartizioni_batch::read (const char* codice, char tiporip)
 | 
			
		||||
  if (err == NOERR)
 | 
			
		||||
  {
 | 
			
		||||
    TRectype rrip(LF_RRIP);
 | 
			
		||||
    rrip.put(RRIP_TIPO, 'B');
 | 
			
		||||
    rrip.put(RRIP_TIPO, tiporip);
 | 
			
		||||
    rrip.put(RRIP_CODICE, codice);
 | 
			
		||||
    TRecord_array::read(rrip);
 | 
			
		||||
  }
 | 
			
		||||
@ -1583,7 +1603,7 @@ int TAnal_ripartizioni_batch::read (const char* codice, char tiporip)
 | 
			
		||||
int TAnal_ripartizioni_batch::read_rip_4(TLocalisamfile& rip, const char* codcosto, const char* commessa, 
 | 
			
		||||
                                         const char* fase, const int annoes, const int indbil, const int classe_mov) const
 | 
			
		||||
{
 | 
			
		||||
  rip.put(RIP_TIPO, "B"); //solo tipi batch!
 | 
			
		||||
  rip.put(RIP_TIPO, "B"); //solo tipi batch, unici per chiave cdc/cms/fase
 | 
			
		||||
  rip.put(RIP_CODCOSTO, codcosto);
 | 
			
		||||
  rip.put(RIP_CODCMS, commessa);
 | 
			
		||||
  rip.put(RIP_CODFASE, fase);
 | 
			
		||||
@ -1628,14 +1648,14 @@ int TAnal_ripartizioni_batch::read (const char* codcosto, const char* commessa,
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (err == NOERR)
 | 
			
		||||
    err = read(rip.get(RIP_CODICE), 'B');
 | 
			
		||||
    err = read('B', rip.get(RIP_CODICE)); //per chiave 4 solo tipo B (batch)
 | 
			
		||||
  return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int TAnal_ripartizioni_batch::read_rip_3(TLocalisamfile& rip, const int gr, const int co, const long sot, 
 | 
			
		||||
                                    const int annoes, const int indbil, const int classe_mov, char tiporip) const
 | 
			
		||||
int TAnal_ripartizioni_batch::read_rip_3(TLocalisamfile& rip, const char tiporip, const int gr, const int co, const long sot, 
 | 
			
		||||
                                    const int annoes, const int indbil, const int classe_mov) const
 | 
			
		||||
{
 | 
			
		||||
  rip.put(RIP_TIPO, tiporip); //solo tipi batch!
 | 
			
		||||
  rip.put(RIP_TIPO, tiporip); //tipo 'P' oppure tipo 'I', che sono quelli che vanno per conto
 | 
			
		||||
  rip.put(RIP_GRUPPO, gr);
 | 
			
		||||
  rip.put(RIP_CONTO, co);
 | 
			
		||||
  rip.put(RIP_SOTTOCONTO, sot);
 | 
			
		||||
@ -1645,43 +1665,43 @@ int TAnal_ripartizioni_batch::read_rip_3(TLocalisamfile& rip, const int gr, cons
 | 
			
		||||
	return rip.read();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int TAnal_ripartizioni_batch::read (const int gr, const int co, const long sot, 
 | 
			
		||||
                                    const int annoes, const int indbil, const int classe_mov, char tiporip)
 | 
			
		||||
int TAnal_ripartizioni_batch::read (const char tiporip, const int gr, const int co, const long sot, 
 | 
			
		||||
                                    const int annoes, const int indbil, const int classe_mov)
 | 
			
		||||
{
 | 
			
		||||
  CHECKD(classe_mov > 0, "Classe movimento non valida ", classe_mov);
 | 
			
		||||
  TLocalisamfile rip(LF_RIP);
 | 
			
		||||
  rip.setkey(3);
 | 
			
		||||
 | 
			
		||||
  int err = read_rip_3(rip, gr, co, sot, annoes, indbil, classe_mov, tiporip);
 | 
			
		||||
  int err = read_rip_3(rip, tiporip, gr, co, sot, annoes, indbil, classe_mov);
 | 
			
		||||
  if (err != NOERR)
 | 
			
		||||
     err = read_rip_3(rip, gr, co, sot, annoes, indbil, 0, tiporip);
 | 
			
		||||
     err = read_rip_3(rip, tiporip, gr, co, sot, annoes, indbil, 0);
 | 
			
		||||
 | 
			
		||||
  //la put va rifatta perche' potrebbe essersi spostato al record successivo!!!
 | 
			
		||||
  //se fallisce il primo tentativo prova con lo stesso anno e indbil=0
 | 
			
		||||
  if (err != NOERR && indbil != 0)
 | 
			
		||||
  {
 | 
			
		||||
    err = read_rip_3(rip, gr, co, sot, annoes, 0, classe_mov, tiporip);
 | 
			
		||||
    err = read_rip_3(rip, tiporip, gr, co, sot, annoes, 0, classe_mov);
 | 
			
		||||
    if (err != NOERR)
 | 
			
		||||
      err = read_rip_3(rip, gr, co, sot, annoes, 0, 0, tiporip);
 | 
			
		||||
      err = read_rip_3(rip, tiporip, gr, co, sot, annoes, 0, 0);
 | 
			
		||||
  }
 | 
			
		||||
  //se fallisce ancora riprova con anno=0 e lo stesso indbil
 | 
			
		||||
  if (err != NOERR && annoes != 0)
 | 
			
		||||
  {
 | 
			
		||||
    err = read_rip_3(rip, gr, co, sot, 0, indbil, classe_mov, tiporip);
 | 
			
		||||
    err = read_rip_3(rip, tiporip, gr, co, sot, 0, indbil, classe_mov);
 | 
			
		||||
    if (err != NOERR)
 | 
			
		||||
      err = read_rip_3(rip, gr, co, sot, 0, indbil, 0, tiporip);
 | 
			
		||||
      err = read_rip_3(rip, tiporip, gr, co, sot, 0, indbil, 0);
 | 
			
		||||
 
 | 
			
		||||
    //estremo tentativo con annoes e indbil = 0
 | 
			
		||||
    if (err != NOERR && indbil != 0)
 | 
			
		||||
    {
 | 
			
		||||
      err = read_rip_3(rip, gr, co, sot, 0, 0, classe_mov, tiporip);
 | 
			
		||||
      err = read_rip_3(rip, tiporip, gr, co, sot, 0, 0, classe_mov);
 | 
			
		||||
      if (err != NOERR)
 | 
			
		||||
        err = read_rip_3(rip, gr, co, sot, 0, 0, 0, tiporip);
 | 
			
		||||
        err = read_rip_3(rip, tiporip, gr, co, sot, 0, 0, 0);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (err == NOERR)
 | 
			
		||||
    err = read(rip.get(RIP_CODICE), tiporip);
 | 
			
		||||
    err = read(tiporip, rip.get(RIP_CODICE)); //per chiave 3 sia tiporip=P che tiporip=B
 | 
			
		||||
  return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1700,7 +1720,9 @@ TObject* TCache_ripartizioni::key2obj(const char* key)
 | 
			
		||||
 | 
			
		||||
  TAnal_ripartizioni_batch* rip = new TAnal_ripartizioni_batch;
 | 
			
		||||
 
 | 
			
		||||
  if (nkey == 3)
 | 
			
		||||
  switch (nkey)
 | 
			
		||||
  {
 | 
			
		||||
  case 3:
 | 
			
		||||
    {
 | 
			
		||||
      const int gruppo = parametro.get_int(1);
 | 
			
		||||
      const int conto = parametro.get_int(2);
 | 
			
		||||
@ -1708,11 +1730,25 @@ TObject* TCache_ripartizioni::key2obj(const char* key)
 | 
			
		||||
      const int anno = parametro.get_int(4);
 | 
			
		||||
      const int indbil = parametro.get_int(5);
 | 
			
		||||
      const int classe_mov = parametro.get_int(6);
 | 
			
		||||
		const char tiporip = parametro.get_char(7);
 | 
			
		||||
 | 
			
		||||
    rip->read(gruppo, conto, sottoconto, anno, indbil, classe_mov, tiporip);
 | 
			
		||||
      //solo i movimenti a pareggio hanno chiave 3
 | 
			
		||||
      rip->read('P', gruppo, conto, sottoconto, anno, indbil, classe_mov);
 | 
			
		||||
    }
 | 
			
		||||
  else  //chiave 4
 | 
			
		||||
    break;
 | 
			
		||||
  case 5:
 | 
			
		||||
    {
 | 
			
		||||
      const int gruppo = parametro.get_int(1);
 | 
			
		||||
      const int conto = parametro.get_int(2);
 | 
			
		||||
      const long sottoconto = parametro.get_long(3);
 | 
			
		||||
      const int anno = parametro.get_int(4);
 | 
			
		||||
      const int indbil = parametro.get_int(5);
 | 
			
		||||
      const int classe_mov = parametro.get_int(6);
 | 
			
		||||
 | 
			
		||||
      //solo i movimenti interattivi e di conversione hanno chiave 5
 | 
			
		||||
      rip->read('I', gruppo, conto, sottoconto, anno, indbil, 1);
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
  default:  //chiave 4: normali ripartizioni batch
 | 
			
		||||
    {
 | 
			
		||||
      const TString80 codcosto = parametro.get(1);
 | 
			
		||||
      const TString80 commessa = parametro.get(2);
 | 
			
		||||
@ -1723,7 +1759,8 @@ TObject* TCache_ripartizioni::key2obj(const char* key)
 | 
			
		||||
 | 
			
		||||
      rip->read(codcosto, commessa, fase, anno, indbil, classe_mov);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
	if (rip->head().get_int(RIP_TIPORIP) == 1)
 | 
			
		||||
	{
 | 
			
		||||
		bool some_value = false;
 | 
			
		||||
@ -1787,7 +1824,7 @@ const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const char* costo, co
 | 
			
		||||
  return *(const TAnal_ripartizioni_batch*)objptr(parametro);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const TBill& bill, const int annoes, const char tipomov, char tiporip)
 | 
			
		||||
const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const TBill& bill, const int annoes, const char tipomov)
 | 
			
		||||
{
 | 
			
		||||
  //classi di movimento: se preventivi 2, se normali 1
 | 
			
		||||
  int classe_movimento;
 | 
			
		||||
@ -1798,7 +1835,44 @@ const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const TBill& bill, co
 | 
			
		||||
 | 
			
		||||
  TToken_string parametro;
 | 
			
		||||
  parametro << "3|" << bill.gruppo() << '|' << bill.conto() << '|' << bill.sottoconto() << '|' 
 | 
			
		||||
            << annoes << '|' << bill.indicatore_bilancio() << '|' << classe_movimento << '|' << tiporip;  //per chiave 3
 | 
			
		||||
            << annoes << '|' << bill.indicatore_bilancio() << '|' << classe_movimento;  //per chiave 3
 | 
			
		||||
  return *(const TAnal_ripartizioni_batch*)objptr(parametro);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const TAnal_bill& bill, const int annoes, const int indbil, 
 | 
			
		||||
                                                           const char tipomov)
 | 
			
		||||
{
 | 
			
		||||
  TConfig& config = ca_config();
 | 
			
		||||
  const bool use_pdcc = config.get_bool("UsePdcc");    //usa il piano dei conti contabile
 | 
			
		||||
  if (use_pdcc)
 | 
			
		||||
  {
 | 
			
		||||
    const TString& contone = bill.conto();
 | 
			
		||||
    const int gr = atoi(contone.mid(0,3));
 | 
			
		||||
    const int co = atoi(contone.mid(3,3));
 | 
			
		||||
    const long so = atol(contone.mid(6,6));
 | 
			
		||||
    const TBill zio(gr, co, so);
 | 
			
		||||
    const TAnal_ripartizioni_batch& rb = righe(zio, annoes, tipomov);
 | 
			
		||||
    //ha trovato una ripartizione?
 | 
			
		||||
    if (rb.rows() > 0)
 | 
			
		||||
      return rb;
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
  //se non riesce a trovare una ripartizione per conto (chiave 3, tipo 'P') prova con la chiave 4 (cdc/cms/fase, tipo 'B')
 | 
			
		||||
  return righe(bill.costo(), bill.commessa(), bill.fase(), annoes, indbil, tipomov);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const TAnal_ripartizioni_batch& TCache_ripartizioni::righe_interattive(const TBill& bill, const int annoes, const char tipomov)
 | 
			
		||||
{
 | 
			
		||||
    //classi di movimento: se preventivi 2, se normali 1
 | 
			
		||||
  int classe_movimento;
 | 
			
		||||
  if (tipomov == 'P' || tipomov == 'V')
 | 
			
		||||
    classe_movimento = 2;
 | 
			
		||||
  else
 | 
			
		||||
    classe_movimento = 1; //sempre questo per cacnv
 | 
			
		||||
 | 
			
		||||
  TToken_string parametro;
 | 
			
		||||
  parametro << "5|" << bill.gruppo() << '|' << bill.conto() << '|' << bill.sottoconto() << '|' 
 | 
			
		||||
            << annoes << '|' << bill.indicatore_bilancio() << '|' << classe_movimento;  //per chiave 5
 | 
			
		||||
  return *(const TAnal_ripartizioni_batch*)objptr(parametro);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1847,6 +1921,10 @@ bool ca_implode_rows(const TRecord_array& input_rows, TRecord_array& compact_row
 | 
			
		||||
    //se esiste almeno un campo origine compilato puo' implodere, senno' lascia perdere
 | 
			
		||||
    if (ca_ori_present(rec))
 | 
			
		||||
    {
 | 
			
		||||
      //controlla se e' un pareggio e non una ripartizione
 | 
			
		||||
      if (rec.get(RMOVANA_CODCONTORI).blank())
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      int i = 0;
 | 
			
		||||
      for (i = compact_rows.rows(); i > 0; i--) //giro sulle righe gia' compattate per scoprire se
 | 
			
		||||
      {                                         //il nostro record esiste gia' o e' da aggiungere
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								ca/calib01.h
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								ca/calib01.h
									
									
									
									
									
								
							@ -157,6 +157,7 @@ public:
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  int read(long numreg, word lockop = _nolock); // Funzione read di comodo
 | 
			
		||||
  void update_totdoc();
 | 
			
		||||
  TAnal_mov(long numreg = 0);
 | 
			
		||||
	TAnal_mov(const TRectype& rec);	//accetta LF_MOVANA,LF_RMOVANA,LF_MOV
 | 
			
		||||
};
 | 
			
		||||
@ -164,21 +165,24 @@ public:
 | 
			
		||||
///////////////////////////////////////////////////////////
 | 
			
		||||
//  TAnal_ripartizioni_batch (ahi!)
 | 
			
		||||
///////////////////////////////////////////////////////////
 | 
			
		||||
class TAnal_bill;
 | 
			
		||||
 | 
			
		||||
class TAnal_ripartizioni_batch : public TRecord_array
 | 
			
		||||
{
 | 
			
		||||
  TRectype _rip;
 | 
			
		||||
private:
 | 
			
		||||
  int read_rip_3(TLocalisamfile& rip, const int gr, const int co, const long sot, 
 | 
			
		||||
                 const int annoes, const int indbil, const int classe_mov, char tiporip) const;
 | 
			
		||||
  int read_rip_3(TLocalisamfile& rip, const char tiporip, const int gr, const int co, const long sot, 
 | 
			
		||||
                 const int annoes, const int indbil, const int classe_mov) const;
 | 
			
		||||
  int read_rip_4(TLocalisamfile& rip, const char* codcosto, const char* commessa, const char* fase,
 | 
			
		||||
                 const int annoes, const int indbil, const int classe_mov) const;
 | 
			
		||||
public:
 | 
			
		||||
  const TRectype& head() const { return _rip; }
 | 
			
		||||
  int indbil() const;
 | 
			
		||||
  int read (const char* codice, char tiporip);
 | 
			
		||||
  char tiporip() const;
 | 
			
		||||
  int read (const char tiporip, const char* codice);
 | 
			
		||||
  int read (const char* codcosto, const char* commessa, const char* fase, const int annoes, const int indbil, const int classe_mov);
 | 
			
		||||
  int read (const int gr, const int co, const long sot, const int annoes, const int indbil, const int classe_mov, char tiporip);
 | 
			
		||||
  int read (const char tiporip, const int gr, const int co, const long sot, const int annoes, const int indbil, const int classe_mov);
 | 
			
		||||
  
 | 
			
		||||
  TAnal_ripartizioni_batch();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -196,9 +200,15 @@ protected:
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	void set_esercizio(const int codes);
 | 
			
		||||
  //batch
 | 
			
		||||
  const TAnal_ripartizioni_batch& righe(const char* costo, const char* commessa, const char* fase,
 | 
			
		||||
                                        const int annoes, const int indbil, const char tipomov);
 | 
			
		||||
  const TAnal_ripartizioni_batch& righe(const TBill& bill, const int annoes, const char tipomov, char tiporip = 'B');
 | 
			
		||||
  //pareggio
 | 
			
		||||
  const TAnal_ripartizioni_batch& righe(const TBill& bill, const int annoes, const char tipomov);
 | 
			
		||||
  //batch
 | 
			
		||||
  const TAnal_ripartizioni_batch& righe(const TAnal_bill& bill, const int annoes, const int indbil, const char tipomov);
 | 
			
		||||
  //interattive per conversione e contabilizzazione (usate da cacnv e da contabilizzazione analitica docs)
 | 
			
		||||
  const TAnal_ripartizioni_batch& righe_interattive(const TBill& bill, const int annoes, const char tipomov = ' ');
 | 
			
		||||
  
 | 
			
		||||
    TCache_ripartizioni();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
149
 | 
			
		||||
13
 | 
			
		||||
TIPO|1|1|0|Tipo Ripartizione (<I>nterattiva, <B>atch)
 | 
			
		||||
TIPO|1|1|0|Tipo Ripartizione (<I>nterattiva, <B>atch, <P>areggio)
 | 
			
		||||
CODICE|1|8|0|Codice ripartizione
 | 
			
		||||
GRUPPO|2|3|0|Gruppo
 | 
			
		||||
CONTO|2|3|0|Conto
 | 
			
		||||
 | 
			
		||||
@ -351,7 +351,7 @@ bool TContabilizzazione_analitica::find_conti_iva_indetraibile(const TRiga_docum
 | 
			
		||||
  else
 | 
			
		||||
	{
 | 
			
		||||
    // Cerca la ripartizione del conto
 | 
			
		||||
		const TAnal_ripartizioni_batch& rip = _rip.righe(bill, annoes, tipomov);
 | 
			
		||||
		const TAnal_ripartizioni_batch& rip = _rip.righe_interattive(bill, annoes, tipomov);
 | 
			
		||||
		for (int i = 1; i <= rip.rows(); i++)
 | 
			
		||||
		{
 | 
			
		||||
			const TRectype& rigarip = rip.row(i);
 | 
			
		||||
@ -438,7 +438,7 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri
 | 
			
		||||
  if (contanal.blank())  // Non ho trovato il conto in anagrafica ...
 | 
			
		||||
  { 
 | 
			
		||||
    // Cerca la ripartizione del conto
 | 
			
		||||
    const TAnal_ripartizioni_batch& rip = _rip.righe(bill, annoes, tipomov, 'I');
 | 
			
		||||
    const TAnal_ripartizioni_batch& rip = _rip.righe_interattive(bill, annoes, tipomov);
 | 
			
		||||
    TToken_string conto;
 | 
			
		||||
    for (int i = 1; i <= rip.rows(); i++)
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user