#include <applicat.h>
#include <automask.h>
#include <defmask.h>
#include <relation.h>
#include <cfven.h>
#include "../ve/velib.h"

#include "ps0920.h"
#include "ps0920200a.h"

#include <rdoc.h>

class TMaskPs09202 : public TAutomask
{
protected:
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);

public:
  TMaskPs09202();
  virtual ~TMaskPs09202();
};

TMaskPs09202::TMaskPs09202()
            : TAutomask("ps0920200a")
{
}

TMaskPs09202::~TMaskPs09202()
{  
}             

bool TMaskPs09202::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
	const int id = o.dlg();
	switch (id)
	{
		case F_CODCLI:
			if (e == fe_modify)
			{
				TString key; key.format("C|%ld", atol(o.get()));
				const TRectype & cli = cache().get(LF_CFVEN, key);
				if (cli.get(CFV_ASSFIS).empty())
					o.mask().enable(F_CODIVA);
				else
				{
					o.mask().set(F_CODIVA, "");
					o.mask().disable(F_CODIVA);
				}

			}
		default:
			break;
	}
  return TRUE;
}

class TAggiornaIVAPs0920 : public TSkeleton_application  
{
  TMaskPs09202 * _mask;
	virtual bool check_autorization() const {return false;}
  virtual const char * extra_modules() const {return "ve";}


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

public:
  const TMaskPs09202 & mask() const {return *_mask;}
  virtual ~TAggiornaIVAPs0920();
};

void TAggiornaIVAPs0920::main_loop()
{
  while (_mask->run() == K_ENTER)
  {
		TCursor c(new TRelation(LF_DOC));
		TRectype from(c.curr());

		from.put(DOC_PROVV, "D");
		from.put(DOC_CODNUM, _mask->get(F_NUM));
		from.put(DOC_ANNO, _mask->get_int(F_ANNO));

		TRectype to(from);
		from.put(DOC_NDOC, _mask->get_int(F_NDOCDA));
		to.put(DOC_NDOC, _mask->get_int(F_NDOCA));
		c.setregion(from, to);
		TString filter; filter.format("CODCF=%ld", _mask->get_long(F_CODCLI));
		c.setfilter(filter);

		TString key; key.format("C|%ld", _mask->get_long(F_CODCLI));
		const TRectype & cli = cache().get(LF_CFVEN, key);
		TString codice_IVA(cli.get(CFV_ASSFIS));
		
		if (codice_IVA.empty())
			codice_IVA = _mask->get(F_CODIVA);

		const long items = c.items();
		TString16 iva_orig;

		for (c = 0L; c.pos() < items; ++c)
		{
			TDocumento doc(c.curr());
			const int rows = doc.physical_rows();

			for (int r = 1 ; r <= rows; r++)
			{
				TRiga_documento & riga = doc[r];

				iva_orig = riga.get(RDOC_CODIVA);

				if (iva_orig.not_empty())
					riga.put(RDOC_CODIVA, codice_IVA);
			}
			doc.rewrite();
		}
	}
}

bool TAggiornaIVAPs0920::create()
{
	_mask = new TMaskPs09202;
	return TSkeleton_application:: create();
}

TAggiornaIVAPs0920::~TAggiornaIVAPs0920()
{
	delete _mask;
}

TAggiornaIVAPs0920 & app() { return (TAggiornaIVAPs0920&) main_app();}

int ps0920200(int argc, char* argv[])
{
  TAggiornaIVAPs0920 a;
  a.run(argc, argv, "Aggiornamento IVA Documenti");
  return 0;
}