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 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..
 | 
			
		||||
@ -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
 | 
			
		||||
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
 | 
			
		||||
	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..
 | 
			
		||||
  //..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())
 | 
			
		||||
  {
 | 
			
		||||
    TDate dataini, datafine;
 | 
			
		||||
    durata_commessa(rec_commessa, dataini, datafine);
 | 
			
		||||
    ca_durata_commessa(rec_commessa, dataini, datafine);
 | 
			
		||||
    if (datafine >= datainiesc && dataini < data_min_comp)
 | 
			
		||||
      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
 | 
			
		||||
      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..
 | 
			
		||||
    //..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, 
 | 
			
		||||
                        const TRectype& saldana, const bool inverti = false, const bool cms_detraz = false) 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;
 | 
			
		||||
  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;
 | 
			
		||||
 | 
			
		||||
@ -1291,9 +1291,19 @@ void TAnal_mov::saldo_set_reset(const TRectype& row, bool reset)
 | 
			
		||||
  annies.add(esc_iniziale);
 | 
			
		||||
  
 | 
			
		||||
  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 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)
 | 
			
		||||
  {
 | 
			
		||||
    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
 | 
			
		||||
    TEsercizi_contabili esc;
 | 
			
		||||
 | 
			
		||||
    const TDate datacomp = get_date(MOVANA_DATACOMP);
 | 
			
		||||
    const TDate datafcomp = get_date(MOVANA_DATAFCOMP);
 | 
			
		||||
 | 
			
		||||
    TDate 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
 | 
			
		||||
@ -2088,3 +2095,60 @@ bool ca_extract_sheet_field(const TSheet_field& sheet, const int row, const int
 | 
			
		||||
  }
 | 
			
		||||
  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
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user