#include <applicat.h>

#include "mg1200.h"
#include "mglib.h"
#include "../cg/cglib01.h"


class TMask_buildmov: public TMask 
{
  TEsercizi_contabili _esercizi;
  static bool handle_annoes(TMask_field &, KEY); // handler del numero di registrazione
public:
  TMask_buildmov();
  virtual ~TMask_buildmov() {}
};

TMask_buildmov::TMask_buildmov() 
  : TMask("mg1200")
{
  set_handler(F_ANNOES, handle_annoes);
}

bool TMask_buildmov::handle_annoes(TMask_field &fld, KEY k)
{
  TMask_buildmov &mask = (TMask_buildmov &)fld.mask();
  if (fld.empty())
  {
    // DEFAULT
    const long esc=mask._esercizi.date2esc(mask.get_date(F_DATA));
    if (esc!=0)
      fld.set(esc);
  } 
  if (fld.to_check(k) || k == K_ENTER) 
  {
    if (mask._esercizi.exist(mask.get_int(F_ANNOES)))
    {
      const TEsercizio & e=mask._esercizi.esercizio(mask.get_int(F_ANNOES));
      if (e.chiusura_mag()!=TDate(NULLDATE))
      {
        fld.error_box(TR("Il magazzino dell'esercizio indicato risulta chiuso \nImpossibile effettuare la ricostruzione saldi"))  ;
        return FALSE; 
      }                                       
    } 
  }
  return TRUE;
}

class TApp_rebuildbalances : public TSkeleton_application 
{
  TRelation* _rel;   // relazione 
  TCursor* _cur;     // cursore
  int _annoes;
  bool _reset_giac;

protected:
  virtual bool create();
  virtual void main_loop();
};

bool TApp_rebuildbalances::create()
{
  open_files(LF_UMART, LF_MAG, LF_RMOVMAG, LF_TABCOM, LF_STOMAG, LF_DESLIN, LF_CODCORR, 0);
  return TSkeleton_application::create();
}

void TApp_rebuildbalances::main_loop()
{
  TMask_buildmov m;
  while (m.run()==K_ENTER)
  {
	  if (!rebuild_balances(m.get_int(F_ANNOES)))
      warning_box(TR("A causa degli errori riscontrati i saldi di magazzino \npotrebbero non essere stati del tutto aggiornati. \nProcedere ad una nuova operazione di ''Ricostruzione saldi''"));
  }
}

int mg1200(int argc, char* argv[])
{
  TApp_rebuildbalances a;
  a.run(argc, argv, TR("Ricostruzione saldi"));
  return 0;
}