Correzioni per Aerea
git-svn-id: svn://10.65.10.50/branches/R_10_00@22883 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									1b64d55829
								
							
						
					
					
						commit
						f6f643fa96
					
				@ -752,7 +752,7 @@ END
 | 
			
		||||
 | 
			
		||||
STRING F_E_PIVA_HARDY 12
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 2 4 "Partita IVA Hardy         "
 | 
			
		||||
  PROMPT 2 4 "Partita IVA Hardy/Aerea   "
 | 
			
		||||
  HELP "Partita IVA Hardy"
 | 
			
		||||
  FIELD Esselunga_PIvaHardy
 | 
			
		||||
END
 | 
			
		||||
@ -766,9 +766,10 @@ END
 | 
			
		||||
 | 
			
		||||
NUMBER F_E_COD_HARDY 6
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 2 6 "Cod. fornitore Hardy      "
 | 
			
		||||
  PROMPT 2 6 "Cod. fornitore Hardy/Aerea"
 | 
			
		||||
  HELP "Codice fornitore Hardy presso Esselunga"
 | 
			
		||||
  FIELD Esselunga_CodHardy
 | 
			
		||||
  FLAGS "Z"
 | 
			
		||||
END	
 | 
			
		||||
 | 
			
		||||
NUMBER F_E_COD_ESSELUNGA 6
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										185
									
								
								ha/ha0500.cpp
									
									
									
									
									
								
							
							
						
						
									
										185
									
								
								ha/ha0500.cpp
									
									
									
									
									
								
							@ -4,6 +4,7 @@
 | 
			
		||||
#include <recarray.h>
 | 
			
		||||
#include <recset.h>
 | 
			
		||||
#include <reputils.h>
 | 
			
		||||
#include <utility.h>
 | 
			
		||||
 | 
			
		||||
#include <doc.h>
 | 
			
		||||
#include <rdoc.h>
 | 
			
		||||
@ -32,22 +33,77 @@ bool THardy_elab_docs_mask::on_field_event(TOperable_field& o, TField_event e, l
 | 
			
		||||
{ 
 | 
			
		||||
	switch (o.dlg())
 | 
			
		||||
	{
 | 
			
		||||
  case F_ADATA:
 | 
			
		||||
    if (e == fe_close || e == fe_modify)
 | 
			
		||||
  case F_DADATA:
 | 
			
		||||
    if ((e == fe_close || e == fe_modify) && !o.empty())
 | 
			
		||||
    {
 | 
			
		||||
      //se la data iniziale è piena -> l'anno deve essere lo stesso nelle 2 date;
 | 
			
		||||
      //se invece è vuota -> la data iniziale viene presa come la data iniziale dell'esercizio della data finale...
 | 
			
		||||
      //..ma questo qui non serve e viene rinviato alla query principale del recordset
 | 
			
		||||
      const TDate adata = get_date(F_ADATA);
 | 
			
		||||
      TEsercizi_contabili esc;
 | 
			
		||||
      const int adata_esc = esc.date2esc(adata);
 | 
			
		||||
 | 
			
		||||
      TDate dadata = o.get();
 | 
			
		||||
      if (dadata.ok())
 | 
			
		||||
      TDate da_data = o.get();
 | 
			
		||||
      const TDate a_data = get_date(F_ADATA);
 | 
			
		||||
      if (da_data.ok())
 | 
			
		||||
      {
 | 
			
		||||
        const int dadata_esc = esc.date2esc(dadata);
 | 
			
		||||
        if (adata_esc != dadata_esc)
 | 
			
		||||
          return error_box(TR("Le date devono appartenere allo stesso esercizio!"));
 | 
			
		||||
        bool changed = false;
 | 
			
		||||
        if (da_data.day() != 1)
 | 
			
		||||
        {
 | 
			
		||||
          da_data.set_day(1);
 | 
			
		||||
          changed = true;
 | 
			
		||||
        }
 | 
			
		||||
        const int tc = get_int(F_TIPOCONTR);
 | 
			
		||||
        if (tc != 8)  // non è nolo
 | 
			
		||||
        {
 | 
			
		||||
          const int m = da_data.month();
 | 
			
		||||
          const int r = m % 3;
 | 
			
		||||
          if (r != 1)
 | 
			
		||||
          {
 | 
			
		||||
            da_data.set_month(m - (r == 0 ? 2 : (r-1)));
 | 
			
		||||
            changed = true;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        if (changed)
 | 
			
		||||
          o.set(da_data.string());
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
  case F_ADATA:
 | 
			
		||||
    if ((e == fe_close || e == fe_modify) && !o.empty())
 | 
			
		||||
    {
 | 
			
		||||
      TDate d = o.get();
 | 
			
		||||
      if (d.ok())
 | 
			
		||||
      {
 | 
			
		||||
        bool changed = false;
 | 
			
		||||
        const int tc = get_int(F_TIPOCONTR);
 | 
			
		||||
        if (tc != 8)  // Non è nolo
 | 
			
		||||
        {
 | 
			
		||||
          const int m = d.month();
 | 
			
		||||
          const int r = m % 3;
 | 
			
		||||
          if (r != 0)
 | 
			
		||||
          {
 | 
			
		||||
            d.set_month(m + 3 - r);
 | 
			
		||||
            changed = true;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
          TDate da_data = d; 
 | 
			
		||||
          da_data.set_day(1);
 | 
			
		||||
          set(F_DADATA, da_data);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!d.is_end_month())
 | 
			
		||||
        {
 | 
			
		||||
          d.set_end_month();
 | 
			
		||||
          changed = true;
 | 
			
		||||
        }
 | 
			
		||||
        if (changed)
 | 
			
		||||
          o.set(d.string());
 | 
			
		||||
 | 
			
		||||
        if (e == fe_close)
 | 
			
		||||
        {
 | 
			
		||||
          const TDate dal = get(F_DADATA);
 | 
			
		||||
          if (dal.ok() && dal.year() != d.year())
 | 
			
		||||
            return error_box(TR("Le date devono appartenere allo stesso anno!"));
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
@ -56,15 +112,15 @@ bool THardy_elab_docs_mask::on_field_event(TOperable_field& o, TField_event e, l
 | 
			
		||||
  case F_DEFINITIVO:
 | 
			
		||||
    if (e == fe_modify)   
 | 
			
		||||
    {
 | 
			
		||||
      if (o.get() == "X")
 | 
			
		||||
      if (o.get().full())
 | 
			
		||||
      {
 | 
			
		||||
        set(F_KILLPROVV, "X");
 | 
			
		||||
        disable(F_KILLPROVV);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        reset(F_KILLPROVV);
 | 
			
		||||
        enable(F_KILLPROVV);
 | 
			
		||||
        set(F_KILLPROVV, " ");
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
@ -74,8 +130,6 @@ bool THardy_elab_docs_mask::on_field_event(TOperable_field& o, TField_event e, l
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
///////////////////////////////////////
 | 
			
		||||
// TSkeleton_application
 | 
			
		||||
///////////////////////////////////////
 | 
			
		||||
@ -90,6 +144,7 @@ protected:
 | 
			
		||||
 | 
			
		||||
  //metodi medio livello
 | 
			
		||||
  bool aggiorna_contratto(const TRiga_documento& rdoc, TContratto_premi& contratto, TLog_report& log);
 | 
			
		||||
  bool deve_generare_nac(const TContratto_premi& contratto, const TDate& data) const;
 | 
			
		||||
  bool elabora_contratti(TDocumento& curr_doc, TArray& contratti_cliente, const TDate& data_fine, TLog_report& log);
 | 
			
		||||
  bool genera_nac(const TMask& mask, TArray& contratti_cliente, TAssoc_array& nac_nolo, TLog_report& log);
 | 
			
		||||
  bool genera_fat(const TMask& mask, TContratto_premi& contratto, TToken_string& nakey, TLog_report& log);
 | 
			
		||||
@ -184,6 +239,8 @@ int THardy_elab_docs::kill_provv_nac(const TMask& mask)
 | 
			
		||||
//metodo che filtra tutti i documenti in base ai parametri della maschera
 | 
			
		||||
long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recset)
 | 
			
		||||
{
 | 
			
		||||
  const int tc = mask.get_int(F_TIPOCONTR);
 | 
			
		||||
 | 
			
		||||
  //parametri di elaborazione
 | 
			
		||||
  //per prima cosa controlla se il cliente è stato specificato; questo influisce sulla scelta della chiave di ricerca sul file
 | 
			
		||||
  int key = 3;
 | 
			
		||||
@ -197,7 +254,9 @@ long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recs
 | 
			
		||||
  query << "USE DOC KEY " << key;
 | 
			
		||||
  //lo stato dipende da quanto sta scritto sulla elaborazione differita (stato iniziale dei docs da considerare)
 | 
			
		||||
  //viene messo CODNUM nella SELECT perchè, essendoci un range di date nelle chiavi, la numerazione verrebbe ignorata! (provato!)
 | 
			
		||||
  query << "\nSELECT (STATO>=#STATOINI)&&(STATO<'9')";
 | 
			
		||||
  query << "\nSELECT (STATO>=#STATOINI)";
 | 
			
		||||
  if (tc != 8)                  // Per i contratti NON di nolo ...
 | 
			
		||||
    query << "&&(STATO<'9')";   // ... scarta i documenti definitivi
 | 
			
		||||
 | 
			
		||||
  //in base al tipo documento che si deve elaborare (settato in configurazione), ci possono essere più numerazioni da considerare!
 | 
			
		||||
  TConfig config(CONFIG_DITTA, "ha");
 | 
			
		||||
@ -207,11 +266,9 @@ long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recs
 | 
			
		||||
  // Inutile testare tutte le numerazioni, basta il tipo documento
 | 
			
		||||
  query << "&&((" << DOC_TIPODOC << "=='" << tipo_doc_to_elab1 << "')||(" << DOC_TIPODOC << "=='" << tipo_doc_to_elab2 << "'))";
 | 
			
		||||
 | 
			
		||||
  //se c'è l'agente specificato...
 | 
			
		||||
  const TString& agente = mask.get(F_CODAGE);
 | 
			
		||||
  
 | 
			
		||||
  //ordinamento (agente)-codcf-ndoc
 | 
			
		||||
  query << "\nBY " << DOC_CODCF << " " << DOC_NDOC;
 | 
			
		||||
  if (codcf <= 0)
 | 
			
		||||
    query << "\nBY " << DOC_CODCF << ' ' << DOC_NDOC;  //ordinamento codcf-ndoc
 | 
			
		||||
 | 
			
		||||
  //from-to dipendente da chiave
 | 
			
		||||
  switch (key)
 | 
			
		||||
@ -242,6 +299,8 @@ long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recs
 | 
			
		||||
  const TString& stato_ini = config.get("StatoIniFatt");
 | 
			
		||||
  recset.set_var("#STATOINI", stato_ini);
 | 
			
		||||
 | 
			
		||||
  //se c'è l'agente specificato...
 | 
			
		||||
  const TString& agente = mask.get(F_CODAGE);
 | 
			
		||||
  if (agente.full())
 | 
			
		||||
    recset.set_var("#CODAG", agente);
 | 
			
		||||
  if (codcf > 0)
 | 
			
		||||
@ -454,6 +513,21 @@ bool THardy_elab_docs::aggiorna_contratto(const TRiga_documento& rdoc, TContratt
 | 
			
		||||
  return elaborato;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool THardy_elab_docs::deve_generare_nac(const TContratto_premi& contratto, const TDate& data) const
 | 
			
		||||
{
 | 
			
		||||
  const int mese = data.month();
 | 
			
		||||
  bool yes = false;
 | 
			
		||||
  switch (contratto.frequenza())
 | 
			
		||||
  {
 | 
			
		||||
  case 'A': yes = mese == 12; break;            // Gli annuali valgono solo a dicembre
 | 
			
		||||
  case 'M': yes = true; break;                  // I mensili (nolo) valgono sempre
 | 
			
		||||
  case 'S': yes = mese == 6 || mese == 12;      // I semestrali valgono solo a giugno e dicembre
 | 
			
		||||
  case 'T': yes = data.month() % 3 == 0; break; // I trimestrali valgono solo a marzo, giugno, settembre e dicembre
 | 
			
		||||
  default:  break;
 | 
			
		||||
  }
 | 
			
		||||
  return yes;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//aggiorna, in base al documento in esame curr_doc, le somme restituite nelle righe di tipo verigh02 nei contratti validi..
 | 
			
		||||
//..del cliente
 | 
			
		||||
bool THardy_elab_docs::elabora_contratti(TDocumento& curr_doc, TArray& contratti_cliente, const TDate& data_fine, TLog_report& log)
 | 
			
		||||
@ -472,11 +546,12 @@ bool THardy_elab_docs::elabora_contratti(TDocumento& curr_doc, TArray& contratti
 | 
			
		||||
      
 | 
			
		||||
      // Calcola l'inizio di validità dei documenti in base alla frequenza (14-01-2013)
 | 
			
		||||
      TDate data_inizio(1, 1, data_fine.year());
 | 
			
		||||
      const int mese = data_fine.month();
 | 
			
		||||
      switch (contratto.frequenza())
 | 
			
		||||
      {
 | 
			
		||||
      case 'M': data_inizio.set_month(data_fine.month()); break; // Solo contratti NOLO
 | 
			
		||||
      case 'S': data_inizio.set_month(data_fine.month() > 6 ? 7 : 1); break;
 | 
			
		||||
      case 'T': data_inizio.set_month(max(1, data_fine.month()-2));   break;
 | 
			
		||||
      case 'M': data_inizio.set_month(mese); break; // Solo contratti NOLO
 | 
			
		||||
      case 'S': data_inizio.set_month(mese > 6 ? 7 : 1); break;
 | 
			
		||||
      case 'T': data_inizio.set_month(max(1, mese-2));   break;
 | 
			
		||||
      default:  break;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@ -498,6 +573,7 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
 | 
			
		||||
 | 
			
		||||
  //si informa se l'elaborazione è definitiva o meno
 | 
			
		||||
  const bool definitivo = mask.get_bool(F_DEFINITIVO);
 | 
			
		||||
  const TDate data_fine = mask.get(F_ADATA);
 | 
			
		||||
 | 
			
		||||
  //giro su tutti i contratti del cliente che stanno nell'array (ogni contratto genera una NAC)
 | 
			
		||||
  FOR_EACH_ARRAY_ITEM(contratti_cliente, r, riga)
 | 
			
		||||
@ -507,9 +583,36 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
 | 
			
		||||
    const long codcf = contratto.codcf();                    // il codice cliente ci serve nella generazione della NAC...
 | 
			
		||||
    const char tipo_contratto = contratto.tipo_contratto();  // ...e pure il tipo di contratto in esame!
 | 
			
		||||
 | 
			
		||||
    TString80 tip = "";
 | 
			
		||||
    switch (tipo_contratto)
 | 
			
		||||
    {
 | 
			
		||||
    case 'A': tip = TR("Anticipo");  break;
 | 
			
		||||
    case 'N': tip = TR("Nolo"); break;
 | 
			
		||||
    case 'P': tip = TR("Posticipo");  break;
 | 
			
		||||
    case 'R': tip = TR("Rifatturzaione");  break;
 | 
			
		||||
    default : break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    TString80 freq = "";
 | 
			
		||||
    switch (contratto.frequenza())
 | 
			
		||||
    {
 | 
			
		||||
    case 'A': freq = TR("annuale");  break;
 | 
			
		||||
    case 'M': freq << TR("rata ") << (contratto.get_int(DOC_NUMANT)+1); break;
 | 
			
		||||
    case 'S': freq << (data_fine.month() < 7 ? TR("I sem.") : TR("II sem."));  break;
 | 
			
		||||
    case 'T': freq << itor((data_fine.month()/3)) << TR(" trim."); break;
 | 
			
		||||
    default : break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const bool nac_ok = deve_generare_nac(contratto, data_fine);
 | 
			
		||||
    //segnaliamo l'elaborazione del contratto sul log
 | 
			
		||||
    TString log_msg;
 | 
			
		||||
    log_msg.format(FR("Contratto:%6ld Cliente:%6ld"), ndoc, codcf);
 | 
			
		||||
    log_msg.format(FR("Cliente:%ld Contratto:%ld %s %s"), codcf, ndoc, (const char*)tip, (const char*)freq);
 | 
			
		||||
    log_msg << "(NAC ";
 | 
			
		||||
    if (nac_ok)
 | 
			
		||||
      log_msg << "def.";
 | 
			
		||||
    else
 | 
			
		||||
      log_msg << "provv.";
 | 
			
		||||
    log_msg << ')';
 | 
			
		||||
 | 
			
		||||
    //  generazione del documento NAC dal contratto
 | 
			
		||||
    //  -------------------------------------------
 | 
			
		||||
@ -556,7 +659,7 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
 | 
			
		||||
    const int anno = datadoc.year();
 | 
			
		||||
    //solo in caso di elaborazione definitiva si scrivono NAC di tipo D; 
 | 
			
		||||
    //sennò di tipo P, che sono uccidibili all'inizio di ogni nuova elaborazione
 | 
			
		||||
    const char provv = definitivo ? 'D' : 'P';
 | 
			
		||||
    const char provv = definitivo && nac_ok ? 'D' : 'P';
 | 
			
		||||
 | 
			
		||||
    TDocumento nac(provv, anno, nac_codnum, 0);   //num_doc = 0 perchè viene aggiornato in fase di registrazione
 | 
			
		||||
    nac.set_tipo(nac_tipo);
 | 
			
		||||
@ -761,7 +864,11 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
 | 
			
		||||
        log_msg << " -- Impossibile aggiornare contratto: errore " << err;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
    log.log(0, log_msg);
 | 
			
		||||
    if (err == NOERR)
 | 
			
		||||
      log.log(nac_ok ? 1 : 0, log_msg);
 | 
			
		||||
    else
 | 
			
		||||
      log.log(2, log_msg);
 | 
			
		||||
  
 | 
			
		||||
    log.log(0, "");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -962,30 +1069,15 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
 | 
			
		||||
      old_codcf = codcf;
 | 
			
		||||
 | 
			
		||||
      const int n_contratti = find_contratti_cliente(codcf, mask, tc, contratti_cliente);
 | 
			
		||||
 | 
			
		||||
      TString8 key; key.format("C|%ld", codcf);
 | 
			
		||||
      TString msg; msg << TR("Cliente") << ' ' << codcf << ' ' << cache().get(LF_CLIFO, key, CLI_RAGSOC);
 | 
			
		||||
 | 
			
		||||
      if (n_contratti > 0)
 | 
			
		||||
      {
 | 
			
		||||
        TString8 key; key.format("C|%ld", codcf);
 | 
			
		||||
        TString msg; msg << TR("Cliente") << ' ' << codcf << ' ' << cache().get(LF_CLIFO, key, CLI_RAGSOC);
 | 
			
		||||
        log.log(0, msg);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        if (tc & 0x8) // Elaborazione nolo?
 | 
			
		||||
        {
 | 
			
		||||
          // Nulla di grave se non esistono contratti di nolo
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
          log.log(0, msg);
 | 
			
		||||
          msg =  TR("Non ha un contratto valido nel periodo selezionato pur avendo fatture.");
 | 
			
		||||
          log.log(1, msg); 
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (contratti_cliente.items() > 0)
 | 
			
		||||
    if (!contratti_cliente.empty())
 | 
			
		||||
    {
 | 
			
		||||
      const TDate data_fine = mask.get(F_ADATA);
 | 
			
		||||
 | 
			
		||||
@ -1003,9 +1095,8 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
 | 
			
		||||
  if (!contratti_cliente.empty())
 | 
			
		||||
    genera_nac(mask, contratti_cliente, fat_nolo, log);
 | 
			
		||||
 | 
			
		||||
  //se elaborazione definitiva -> cambia lo stato ai documenti di vendita elaborati, mettendolo uguale..
 | 
			
		||||
  //..a quello deciso in configurazione
 | 
			
		||||
  const bool definitivo = mask.get_bool(F_DEFINITIVO);
 | 
			
		||||
  // se elaborazione definitiva NON di nolo-> cambia lo stato ai documenti di vendita elaborati
 | 
			
		||||
  const bool definitivo = mask.get_bool(F_DEFINITIVO) && ((tc & 0x8) == 0);
 | 
			
		||||
  if (definitivo && !documenti_cliente.empty())
 | 
			
		||||
  {
 | 
			
		||||
    const TString4 stato_finale = ini_get_string(CONFIG_DITTA, "ha", "StatoFinFatt");
 | 
			
		||||
 | 
			
		||||
@ -67,6 +67,7 @@ BEGIN
 | 
			
		||||
  PROMPT 22 4 "A data "
 | 
			
		||||
  CHECKTYPE REQUIRED
 | 
			
		||||
  VALIDATE DATE_CMP_FUNC >= F_DADATA
 | 
			
		||||
  WARNING "Inserire una data successiva a quella iniziale"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
GROUPBOX DLG_NULL 76 4
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user