#include <applicat.h>
#include <automask.h>
#include <execp.h>
#include <progind.h>
#include <relation.h>

#include "baeur.h"
#include "../mg/mglib.h"
#include "../cg/cglib01.h"

#include <doc.h>
#include <rdoc.h>

///////////////////////////////////////////////////////////
// Main app
///////////////////////////////////////////////////////////

class TEuro05_app : public TEuro_app
{ 
protected:
  virtual void main_loop();
  void convert_last_mag_eser(int eser);
  void convert_last_sto_eser(int eser);

public:
};

inline TEuro05_app& app() { return (TEuro05_app&)main_app(); }

///////////////////////////////////////////////////////////
// Main 
///////////////////////////////////////////////////////////

void TEuro05_app::convert_last_mag_eser(int eser)
{  
  // Cursore su file in lire
  TRelation rel(LF_MAG);
  TCursor cur(&rel);
  TRectype& curr = rel.curr();
  
  curr.put("ANNOES", eser);
  
  cur.setregion(curr, curr);
  
//  zap_file(lf, TRUE); // Azzera file in euro

  // File destinazione in euro
  TEuroisamfile fileur(LF_MAG, TRUE);
  TRectype& receur = fileur.curr();
  
  receur.put("ANNOES", eser);
  
  for (fileur.read(_isgteq); fileur.good() && eser == fileur.get_int("ANNOES");  fileur.next())
    fileur.remove();

  TString str;
  str << "Conversione " << rel.lfile().description() << " anno " << eser << " ... ";
  
  
  const long items = cur.items();
  cur.freeze();
  TProgind pi(items, str, FALSE, TRUE);
  TString fields;

  fields << "VALRIM|VALACQ|VALENT|VALVEN|VALUSC|VALORDF|VALORDF|SCARTI|VALSCARTI|";
  fields << "USERVAL1|USERVAL2|USERVAL3|USERVAL4|USERVAL5|USERVAL6";

  for (cur = 0L; cur.pos() < items; ++cur)
  {     
    pi.addstatus(1);
    receur = curr;
    convert_import(receur, fields);
    zero_import(receur, "ORDC|VALORDC|ORDF|VALORDF");
    fileur.write();
  }
}

void TEuro05_app::convert_last_sto_eser(int eser)
{  
  // Cursore su file in lire
  TRelation rel(LF_STOMAG);
  TCursor cur(&rel);
  TRectype& curr = rel.curr();
  
  curr.put("ANNOESRIF", eser);
  
  cur.setregion(curr, curr);
  
//  zap_file(lf, TRUE); // Azzera file in euro

  // File destinazione in euro
  TEuroisamfile fileur(LF_STOMAG, TRUE);
  TRectype& receur = fileur.curr();
  
  receur.put("ANNOESRIF", eser);
  
  for (fileur.read(_isgteq); fileur.good() && eser == fileur.get_int("ANNOESRIF");  fileur.next())
    fileur.remove();

  TString str;
  str << "Conversione " << rel.lfile().description() << " anno " << eser << " ... ";
  
  
  const long items = cur.items();
  cur.freeze();
  TProgind pi(items, str, FALSE, TRUE);
  const char* prices = "VALORE|ULTCOS1|ULTCOS2|COSTSTD|COSTOMEDIO|PRZLIST";

  for (cur = 0L; cur.pos() < items; ++cur)
  {     
    pi.addstatus(1);
    receur = curr;
    convert_import(receur, prices, TRUE);
    fileur.write();
  }
}

void TEuro05_app::main_loop()
{                
  goto_lire();
  if (!set_firm())
    return;
  const long firm = get_firm();  
  if (!dbf_exists(LF_MAG, TRUE))
  {
    error_box("Non esistono gli archivi della ditta %ld nell'area in Euro", firm);
    return; 
  }

  TDate apertura(1,1,2002);
  TFilename dati, datie;
  get_aree_dati(dati, datie);
  
  TString8 ditta; 
  ditta.format("%05ldA", firm);
  
  TFilename inie = datie;
  inie.add(ditta);
  inie.add("prassid.ini");
  
  bool adotta = FALSE, inizio = FALSE;
  if (inie.exist())
    adotta = data_adozione_euro(firm, apertura, inizio);
  TEsercizi_contabili esc;
  
  const int annoes = esc.date2prevesc(apertura);
  
  convert_last_mag_eser(annoes);
  convert_last_sto_eser(annoes);

  {
    TExternal_app app("baeur -6 A");
    
    app.run(FALSE, 3);
  }
}

int baeur05(int argc, char* argv[])
{  
  TEuro05_app ma;
  ma.run(argc, argv, "Apertura magazzino");
  
  return 0;
}