#ifndef __HA1250_H
#define __HA1250_H

#include <applicat.h>
#include <mask.h>
#include <reputils.h>
#include <textset.h>

#include "../mg/anamag.h"
#include "../mg/codcorr.h"
#include "../mg/rmovmag.h"
#include "../mg/umart.h"
#include "../pr/agenti.h"
#include "../ve/condv.h"
#include "../ve/rcondv.h"

class THardy_transaction : public TSkeleton_application
{
protected:
  TFilename _output_path, _input_path, _archive_path;
  //TFilename _conc_path, _trans_path;

protected:
  virtual void elabora(const TMask& mask, TLog_report& log) pure;
  virtual TMask* create_mask() const pure;
  bool is_server() const;
  bool is_by_postino() const;
  virtual const char* fake_trans_file() const pure;
  bool wait_for_file(const TFilename& filename) const;
  void chiudi_concentratore();
  void carica_concentratore();
  bool scarica_concentratore();
  void trasmetti_concentratore();

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

//------------------------------------------------------------
//  Hardy_recordset: serve per l'OUTPUT
//------------------------------------------------------------

/////////////////////////////////////////////////////////////
//	Recordset specifici per i dati da trasferire
/////////////////////////////////////////////////////////////
//classe generica per poter aggiungere pedissequamente i campi seguendo le tracce sulla documentazione
//tipologie di campo secondo il ricevente
#define T_N "N"
#define T_2N "2N"
#define T_Nv2N "N,2N"
#define T_Nv3N "N,3N"
#define T_2Nv2N "2N,2N"
#define T_X "X"
#define T_NS "NS"

class THardy_recordset : public TAS400_recordset
{
protected:
  //esportazione
  void add_field(const char* name, const char* tipo, int pos, int len);
  void insert_field(const char* name, const char* tipo, int pos, int len);
  void add_eol_field();
  //importazione
  void add_trc_field(const char* tr, const char* name, const char* tipo, int pos, int len);

public:
  void duplica_capi_zona();
	THardy_recordset(const int rec_length);
};


//Agenti
//-------
class TEsporta_agenti_recordset : public THardy_recordset
{
public:
	TEsporta_agenti_recordset();
};


//Clienti (clifo + cfven)
//-----------------------
class TEsporta_clienti_recordset : public THardy_recordset
{
public:
  void set_fatt(const char* fld_name, const TVariant& value, const bool is_fatt);
	TEsporta_clienti_recordset(int recsize = 307);
};
//..e variazioni clienti!
class TEsporta_clientiVAR_recordset : public TEsporta_clienti_recordset
{
public:
	TEsporta_clientiVAR_recordset();
};


//Sospesi ()
//-----------------------
class TEsporta_sospesi_recordset : public THardy_recordset
{
public:
	TEsporta_sospesi_recordset(int rec_length = 69);
};
//..e variazioni sospesi!
class TEsporta_sospesiVAR_recordset : public TEsporta_sospesi_recordset
{
public:
	TEsporta_sospesiVAR_recordset();
};

//Listini (condv + rcondv)
//------------------------
class TEsporta_listini_recordset : public THardy_recordset
{
public:
	TEsporta_listini_recordset(int rec_length = 38);
};
//..e variazioni listini
class TEsporta_listiniVAR_recordset : public TEsporta_listini_recordset
{
public:
	TEsporta_listiniVAR_recordset();
};

//Contratti (Particolari) (condv + rcondv)
//----------------------------------------
class TEsporta_contratti_recordset : public THardy_recordset
{
public:
	TEsporta_contratti_recordset(int rec_length = 51);
};

//Offerte (Promo) (condv + rcondv)
//----------------------------------------
class TEsporta_offerte_recordset : public THardy_recordset
{
public:
	TEsporta_offerte_recordset(int rec_length = 24);
};

//Prodotti (anamag + umart)
//-------------------------
class TEsporta_prodotti_recordset : public THardy_recordset
{
public:
	TEsporta_prodotti_recordset(int rec_length = 65);
};
//..e variazioni prodotti
class TEsporta_prodottiVAR_recordset : public TEsporta_prodotti_recordset
{
public:
	TEsporta_prodottiVAR_recordset();
};


//Linee
//-----
class TEsporta_linee_recordset : public THardy_recordset
{
public:
  TEsporta_linee_recordset(int rec_length = 53);
};


//Carico (rdoc di carico)
//-----------------------
class TEsporta_carico_recordset : public THardy_recordset
{
public:
  TEsporta_carico_recordset(int rec_length = 27);
};


//Decodart ()
//----------------
class TEsporta_decodart_recordset : public THardy_recordset
{
public:
  TEsporta_decodart_recordset();
};

//Barcode ()
//---------------
class TEsporta_barcode_recordset : public THardy_recordset
{
public:
  TEsporta_barcode_recordset(int rec_length = 27);
};

//Attrezzature ()
//----------------
class TEsporta_attrezzature_recordset : public THardy_recordset
{
public:
  TEsporta_attrezzature_recordset(int rec_length = 107);
};

//Storico Attrezzature ()
//-----------------------
class TEsporta_storico_attrezzature_recordset : public THardy_recordset
{
public:
  TEsporta_storico_attrezzature_recordset(int rec_length = 105);
};

//Pagamenti ()
//-----------------
class TEsporta_pagamenti_recordset : public THardy_recordset
{
public:
  TEsporta_pagamenti_recordset();
};



#endif