// 776200.cpp - Immissione nuova dichiarazione 770
#include <applicat.h>
#include <mask.h>
#include <relation.h>
#include <config.h>
#include <urldefid.h>

#include "776200a.h"
#include "77lib.h"

class TImmissioneDichiarazione : public TApplication
{
  private:
    TRelation*      _rel;
    TMask*          _msk;
    int             _anno_dic;                                      
  protected:
    virtual bool    menu(MENU_TAG);
    virtual void    on_config_change();    
    virtual bool    create();
    virtual bool    destroy();
    bool            do_it();
  public:
    TImmissioneDichiarazione() {}
    ~TImmissioneDichiarazione() {} 
    virtual bool firm_change_enabled() const;   
};

bool TImmissioneDichiarazione::create()
{
  TApplication::create();
  _rel = new TRelation (LF_BASE);
  _rel->add(LF_BASEBIS, "CODDITTA=CODDITTA");
  _msk = new TMask ("776200a");
  dispatch_e_menu (BAR_ITEM(1));
  return TRUE;
}    

bool TImmissioneDichiarazione::destroy()
{
  delete _rel;
  delete _msk;
  return TApplication::destroy();
}

bool TImmissioneDichiarazione::do_it()
{ 
  KEY   tasto;
  
  _msk->set(F_ANNODIC, _anno_dic);  
  _msk->open_modal();

  while ((tasto = _msk->run()) != K_QUIT)
  { 
    long codditta = _msk->get_long(F_CODDITTA);
    if (exist_dichiar_770(codditta)) {
      warning_box("La dichiarazione della ditta %ld esiste gia'", codditta);
      continue;
    }
    if (enter_dichiar_770(codditta, _anno_dic))
      message_box("Dichiarazione inserita");
  }  
  _msk->close_modal();
  return tasto == K_ENTER;
}

bool TImmissioneDichiarazione::menu(MENU_TAG mt)
{
  if (mt == BAR_ITEM(1))
    return do_it();
  return FALSE;
}

void TImmissioneDichiarazione::on_config_change()
{                                
  TConfig conf(CONFIG_STUDIO);
  _anno_dic = (int)conf.get_long(ANNO_SEL, NULL); 
}

bool TImmissioneDichiarazione::firm_change_enabled() const
{
  return FALSE;
}   

int ImmissioneDichiarazioni(int argc, char* argv[])
{
  TImmissioneDichiarazione   app;
  app.run(argc, argv, "Attivazione sostituto");
  return 0;
}