Patch level :10.0 374
Files correlati : Ricompilazione Demo : [ ] Commento : migliorato il calcolo al volo del saldo di un rmovana (considera anche la ca_durata_commessa) git-svn-id: svn://10.65.10.50/trunk@19112 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									5e1edf2a5e
								
							
						
					
					
						commit
						9e8bad6ed9
					
				@ -373,7 +373,7 @@ real TPrint_saldana_recordset::calcola_avanzamento_tempo() const
 | 
				
			|||||||
	  const TString& codcms = get("CODCMS").as_string();
 | 
						  const TString& codcms = get("CODCMS").as_string();
 | 
				
			||||||
	  const TRectype& rec_commesse = cache().get(LF_COMMESSE, codcms);
 | 
						  const TRectype& rec_commesse = cache().get(LF_COMMESSE, codcms);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    durata_commessa(rec_commesse, dataini, datafine);
 | 
					    ca_durata_commessa(rec_commesse, dataini, datafine);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//Si prende SOLO la Fine Esercizio come riferimento di avanzamento (in realta' si..
 | 
						//Si prende SOLO la Fine Esercizio come riferimento di avanzamento (in realta' si..
 | 
				
			||||||
@ -440,60 +440,6 @@ void TPrint_saldana_recordset::aggiorna_importi(TAssoc_array& riga_array,
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//calcola la durata di una commessa e le sue date di inizio e fine
 | 
					 | 
				
			||||||
long TPrint_saldana_recordset::durata_commessa(const TRectype& rec_commesse, TDate& dataini, TDate& datafine) const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  //date iniziale e finale commessa
 | 
					 | 
				
			||||||
	dataini = rec_commesse.get_date(COMMESSE_DATAINIZIO);
 | 
					 | 
				
			||||||
  datafine = rec_commesse.get_date(COMMESSE_DATAFINE);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  //per la data fine deve tener conto di eventuali proroghe..
 | 
					 | 
				
			||||||
  if (rec_commesse.get_bool(COMMESSE_PROROGA))
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    const TDate datapror = rec_commesse.get_date(COMMESSE_DATAPROR);
 | 
					 | 
				
			||||||
    if (datapror.ok())
 | 
					 | 
				
			||||||
	    datafine = datapror;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  //se almeno una delle due date risultasse incompleta..
 | 
					 | 
				
			||||||
  if (!dataini.ok() || !datafine.ok())
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    //prende l'anno
 | 
					 | 
				
			||||||
    TEsercizi_contabili esc;
 | 
					 | 
				
			||||||
    int anno = rec_commesse.get_int(COMMESSE_ANNO);
 | 
					 | 
				
			||||||
    //se non trova un anno valido (non sono ammesse commesse prima del XX secolo!)
 | 
					 | 
				
			||||||
    if (anno <= 1900)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      //prova con dataini, se è buona...
 | 
					 | 
				
			||||||
      if (dataini.ok())
 | 
					 | 
				
			||||||
        anno = esc.date2esc(dataini); 
 | 
					 | 
				
			||||||
      else
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        //allora prova con datafine, se è buona...
 | 
					 | 
				
			||||||
        if (datafine.ok())
 | 
					 | 
				
			||||||
          anno = esc.date2esc(datafine); 
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
          anno = esc.first(); //se nessuna data è buona mette l'anno = al primo esercizio
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //se entrambe le date fossero vuote, visto che comunque adesso l'anno ce l'ha, le può ricavare..
 | 
					 | 
				
			||||||
    if (!dataini.ok() && !datafine.ok())
 | 
					 | 
				
			||||||
      esc.code2range(anno, dataini, datafine);
 | 
					 | 
				
			||||||
    else    //solo una data o nessuna data non buona
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      TDate dummy;
 | 
					 | 
				
			||||||
      //dataini viene messa = ad inizio anno commessa
 | 
					 | 
				
			||||||
      if (!dataini.ok())
 | 
					 | 
				
			||||||
        esc.code2range(anno, dataini, dummy);
 | 
					 | 
				
			||||||
      //datafine viene messa = alla data di scadenza dell'ultimo esercizio valido + 1 anno (mantiene corrette le sezioni di stampa)
 | 
					 | 
				
			||||||
      if (!datafine.ok())
 | 
					 | 
				
			||||||
        esc.code2range(esc.last() + 1, dummy, datafine);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  } //if (!dataini.ok() || !datafine.ok())
 | 
					 | 
				
			||||||
  return datafine - dataini + 1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
//trova la sezione del report in cui ricade in base alle date
 | 
					//trova la sezione del report in cui ricade in base alle date
 | 
				
			||||||
int TPrint_saldana_recordset::ricava_sezione_di_stampa(const TRectype& rec_commesse, 
 | 
					int TPrint_saldana_recordset::ricava_sezione_di_stampa(const TRectype& rec_commesse, 
 | 
				
			||||||
@ -503,7 +449,7 @@ int TPrint_saldana_recordset::ricava_sezione_di_stampa(const TRectype& rec_comme
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  //data iniziale commessa
 | 
					  //data iniziale commessa
 | 
				
			||||||
	TDate dataini, datafine;
 | 
						TDate dataini, datafine;
 | 
				
			||||||
  durata_commessa(rec_commesse, dataini, datafine);
 | 
					  ca_durata_commessa(rec_commesse, dataini, datafine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //Le commesse vengono suddivise in varie sezioni in base alle loro date di inizio/fine/proroga..
 | 
					  //Le commesse vengono suddivise in varie sezioni in base alle loro date di inizio/fine/proroga..
 | 
				
			||||||
  //..e al fatto che possono essere di appoggio (Adolf rikiesten!) secondo lo schema:
 | 
					  //..e al fatto che possono essere di appoggio (Adolf rikiesten!) secondo lo schema:
 | 
				
			||||||
@ -575,7 +521,7 @@ const TDate TPrint_saldana_recordset::calcola_min_datacomp(const TDate& datainie
 | 
				
			|||||||
  for (bool ok = recset.move_first(); ok; ok = recset.move_next())
 | 
					  for (bool ok = recset.move_first(); ok; ok = recset.move_next())
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    TDate dataini, datafine;
 | 
					    TDate dataini, datafine;
 | 
				
			||||||
    durata_commessa(rec_commessa, dataini, datafine);
 | 
					    ca_durata_commessa(rec_commessa, dataini, datafine);
 | 
				
			||||||
    if (datafine >= datainiesc && dataini < data_min_comp)
 | 
					    if (datafine >= datainiesc && dataini < data_min_comp)
 | 
				
			||||||
      data_min_comp = dataini;
 | 
					      data_min_comp = dataini;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -876,7 +822,7 @@ void TPrint_saldana_recordset::elabora_rmovana(TAssoc_array* cms, const TDate& d
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
      //data del cazzo che serve per non rovinare datacomp, che è la data sulla riga, non quella iniziale di cms
 | 
					      //data del cazzo che serve per non rovinare datacomp, che è la data sulla riga, non quella iniziale di cms
 | 
				
			||||||
      TDate datainicms;   
 | 
					      TDate datainicms;   
 | 
				
			||||||
      durata_commessa(rec_commesse, datainicms, datafcomp);
 | 
					      ca_durata_commessa(rec_commesse, datainicms, datafcomp);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    //se siamo in presenza di un movimento senza datafcomp (inserito precdentemente alla nascita di datafcomp..
 | 
					    //se siamo in presenza di un movimento senza datafcomp (inserito precdentemente alla nascita di datafcomp..
 | 
				
			||||||
    //..per tutti i movimenti, come nel gestore dei movana mette datafcomp = datacomp;
 | 
					    //..per tutti i movimenti, come nel gestore dei movana mette datafcomp = datacomp;
 | 
				
			||||||
 | 
				
			|||||||
@ -114,7 +114,6 @@ protected:
 | 
				
			|||||||
	void aggiorna_importo(TAssoc_array& riga_array, const TString& livello, const int indbil, 
 | 
						void aggiorna_importo(TAssoc_array& riga_array, const TString& livello, const int indbil, 
 | 
				
			||||||
                        const TRectype& saldana, const bool inverti = false, const bool cms_detraz = false) const;
 | 
					                        const TRectype& saldana, const bool inverti = false, const bool cms_detraz = false) const;
 | 
				
			||||||
	real calcola_avanzamento_tempo() const;
 | 
						real calcola_avanzamento_tempo() const;
 | 
				
			||||||
  long durata_commessa(const TRectype& rec_commesse, TDate& dataini, TDate& datafine) const;
 | 
					 | 
				
			||||||
  const TDate calcola_min_datacomp(const TDate& datainiesc, const TDate& datafinesc) const;
 | 
					  const TDate calcola_min_datacomp(const TDate& datainiesc, const TDate& datafinesc) const;
 | 
				
			||||||
  int ricava_sezione_di_stampa(const TRectype& rec_commesse, const TDate& datainiesc, const TDate& datafinesc) const;
 | 
					  int ricava_sezione_di_stampa(const TRectype& rec_commesse, const TDate& datainiesc, const TDate& datafinesc) const;
 | 
				
			||||||
  TString ricava_chiave_cdc_fase(const TString& codcms, const TString& fase, const TString& cdc) const;
 | 
					  TString ricava_chiave_cdc_fase(const TString& codcms, const TString& fase, const TString& cdc) const;
 | 
				
			||||||
 | 
				
			|||||||
@ -1291,9 +1291,19 @@ void TAnal_mov::saldo_set_reset(const TRectype& row, bool reset)
 | 
				
			|||||||
  annies.add(esc_iniziale);
 | 
					  annies.add(esc_iniziale);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  const char tipomov = get_char(MOVANA_TIPOMOV);
 | 
					  const char tipomov = get_char(MOVANA_TIPOMOV);
 | 
				
			||||||
// i movimenti analitici possono avere una data di scadenza come la mozzarella
 | 
					  // i movimenti analitici possono avere una data di scadenza come la mozzarella
 | 
				
			||||||
  const TDate datacomp = get_date(MOVANA_DATACOMP);
 | 
					  const TDate datacomp = get_date(MOVANA_DATACOMP);
 | 
				
			||||||
  const TDate datafcomp = get_date(MOVANA_DATAFCOMP);
 | 
					  TDate datafcomp = get_date(MOVANA_DATAFCOMP);
 | 
				
			||||||
 | 
					  //caso cazzuto della scadenza con la fine della commessa (come nella stampa bilancio commessa)
 | 
				
			||||||
 | 
					  if (get_bool(MOVANA_AUTOFCOMP))
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    const TString& codcms = row.get(RMOVANA_CODCMS);
 | 
				
			||||||
 | 
					    const TRectype& rec_commesse = cache().get(LF_COMMESSE, codcms);
 | 
				
			||||||
 | 
					    //data del cazzo che serve per non rovinare datacomp, che è la data sulla riga, non quella iniziale di cms
 | 
				
			||||||
 | 
					    TDate datainicms;   
 | 
				
			||||||
 | 
					    ca_durata_commessa(rec_commesse, datainicms, datafcomp);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (datafcomp.ok() && datafcomp > datacomp)
 | 
					  if (datafcomp.ok() && datafcomp > datacomp)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    TEsercizi_contabili esc;
 | 
					    TEsercizi_contabili esc;
 | 
				
			||||||
@ -1320,9 +1330,6 @@ void TAnal_mov::saldo_set_reset(const TRectype& row, bool reset)
 | 
				
			|||||||
    TToken_string giorni_annies;  //lista dei giorni di saldo per annoes
 | 
					    TToken_string giorni_annies;  //lista dei giorni di saldo per annoes
 | 
				
			||||||
    TEsercizi_contabili esc;
 | 
					    TEsercizi_contabili esc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const TDate datacomp = get_date(MOVANA_DATACOMP);
 | 
					 | 
				
			||||||
    const TDate datafcomp = get_date(MOVANA_DATAFCOMP);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    TDate inizio_esc_iniziale, fine_esc_iniziale;
 | 
					    TDate inizio_esc_iniziale, fine_esc_iniziale;
 | 
				
			||||||
    esc.code2range(esc_iniziale, inizio_esc_iniziale, fine_esc_iniziale);
 | 
					    esc.code2range(esc_iniziale, inizio_esc_iniziale, fine_esc_iniziale);
 | 
				
			||||||
    giorni_annies.add(fine_esc_iniziale - datacomp + 1); //primo esercizio
 | 
					    giorni_annies.add(fine_esc_iniziale - datacomp + 1); //primo esercizio
 | 
				
			||||||
@ -2088,3 +2095,60 @@ bool ca_extract_sheet_field(const TSheet_field& sheet, const int row, const int
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  return codice.full();
 | 
					  return codice.full();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					//calcola la durata di una commessa e le sue date di inizio e fine
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					long ca_durata_commessa(const TRectype& rec_commesse, TDate& dataini, TDate& datafine)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  //date iniziale e finale commessa
 | 
				
			||||||
 | 
						dataini = rec_commesse.get_date(COMMESSE_DATAINIZIO);
 | 
				
			||||||
 | 
					  datafine = rec_commesse.get_date(COMMESSE_DATAFINE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //per la data fine deve tener conto di eventuali proroghe..
 | 
				
			||||||
 | 
					  if (rec_commesse.get_bool(COMMESSE_PROROGA))
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    const TDate datapror = rec_commesse.get_date(COMMESSE_DATAPROR);
 | 
				
			||||||
 | 
					    if (datapror.ok())
 | 
				
			||||||
 | 
						    datafine = datapror;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //se almeno una delle due date risultasse incompleta..
 | 
				
			||||||
 | 
					  if (!dataini.ok() || !datafine.ok())
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    //prende l'anno
 | 
				
			||||||
 | 
					    TEsercizi_contabili esc;
 | 
				
			||||||
 | 
					    int anno = rec_commesse.get_int(COMMESSE_ANNO);
 | 
				
			||||||
 | 
					    //se non trova un anno valido (non sono ammesse commesse prima del XX secolo!)
 | 
				
			||||||
 | 
					    if (anno <= 1900)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      //prova con dataini, se è buona...
 | 
				
			||||||
 | 
					      if (dataini.ok())
 | 
				
			||||||
 | 
					        anno = esc.date2esc(dataini); 
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        //allora prova con datafine, se è buona...
 | 
				
			||||||
 | 
					        if (datafine.ok())
 | 
				
			||||||
 | 
					          anno = esc.date2esc(datafine); 
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					          anno = esc.first(); //se nessuna data è buona mette l'anno = al primo esercizio
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //se entrambe le date fossero vuote, visto che comunque adesso l'anno ce l'ha, le può ricavare..
 | 
				
			||||||
 | 
					    if (!dataini.ok() && !datafine.ok())
 | 
				
			||||||
 | 
					      esc.code2range(anno, dataini, datafine);
 | 
				
			||||||
 | 
					    else    //solo una data o nessuna data non buona
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      TDate dummy;
 | 
				
			||||||
 | 
					      //dataini viene messa = ad inizio anno commessa
 | 
				
			||||||
 | 
					      if (!dataini.ok())
 | 
				
			||||||
 | 
					        esc.code2range(anno, dataini, dummy);
 | 
				
			||||||
 | 
					      //datafine viene messa = alla data di scadenza dell'ultimo esercizio valido + 1 anno (mantiene corrette le sezioni di stampa)
 | 
				
			||||||
 | 
					      if (!datafine.ok())
 | 
				
			||||||
 | 
					        esc.code2range(esc.last() + 1, dummy, datafine);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } //if (!dataini.ok() || !datafine.ok())
 | 
				
			||||||
 | 
					  return datafine - dataini + 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -227,4 +227,6 @@ void ca_copia_campo(const TRectype& src, const char* campo_src, TRectype& dst, c
 | 
				
			|||||||
//metodo per ricavare la stringa dei codici dai campi dello sheet
 | 
					//metodo per ricavare la stringa dei codici dai campi dello sheet
 | 
				
			||||||
bool ca_extract_sheet_field(const TSheet_field& sheet, const int row, const int logicnum, TString& codice);
 | 
					bool ca_extract_sheet_field(const TSheet_field& sheet, const int row, const int logicnum, TString& codice);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//metodo per ricavare la durata di una commessa
 | 
				
			||||||
 | 
					long ca_durata_commessa(const TRectype& rec_commesse, TDate& dataini, TDate& datafine);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user