Files correlati : Ricompilazione Demo : [ ] Commento : git-svn-id: svn://10.65.10.50/trunk@20187 c028cbd2-c16b-5b4b-a496-9718f37d4682
262 lines
6.7 KiB
C++
Executable File
262 lines
6.7 KiB
C++
Executable File
#include <applicat.h>
|
|
#include <automask.h>
|
|
#include <execp.h>
|
|
#include <relation.h>
|
|
#include <reprint.h>
|
|
|
|
#include "lvlib.h"
|
|
#include "lv1200a.h"
|
|
#include "../ve/velib07.h"
|
|
#include "../ve/velib.h"
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TStampa_a_kg_msk
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TStampa_a_kg_msk: public TAutomask
|
|
{
|
|
protected:
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
public:
|
|
TStampa_a_kg_msk();
|
|
};
|
|
|
|
TStampa_a_kg_msk::TStampa_a_kg_msk() : TAutomask("lv1200a") {}
|
|
|
|
bool TStampa_a_kg_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TStampa_a_kg_rep
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TStampa_a_kg_rep : public TLV_report
|
|
{
|
|
TString4 _umkg;
|
|
|
|
protected:
|
|
virtual bool get_usr_val(const TString& name, TVariant& var) const;
|
|
|
|
public:
|
|
TStampa_a_kg_rep();
|
|
virtual ~TStampa_a_kg_rep() {}
|
|
};
|
|
|
|
TStampa_a_kg_rep::TStampa_a_kg_rep()
|
|
{
|
|
_umkg = ini_get_string(CONFIG_DITTA, "lv", "UmKg");
|
|
}
|
|
|
|
bool TStampa_a_kg_rep::get_usr_val(const TString& name, TVariant& var) const
|
|
{
|
|
var = 0;
|
|
if (name == "#PESO")
|
|
{
|
|
const TLV_recordset& recset = (TLV_recordset &) *recordset();
|
|
const TString4 umri = recset.get(RDOC_UMQTA).as_string();
|
|
//se la riga è già espressa in kg non devo fare niente
|
|
if (umri == _umkg)
|
|
var = recset.get(RDOC_QTA);
|
|
// altrimenti
|
|
else
|
|
{
|
|
const TString & codart = recset.get(RDOC_CODARTMAG).as_string();
|
|
TArticolo & art = cached_article(codart);
|
|
const real qta = art.convert_to_um(recset.get(RDOC_QTA).as_real(), NULL, umri, false);
|
|
|
|
if (art.is_first_um(_umkg))
|
|
var = qta;
|
|
else
|
|
{
|
|
//leggo e controllo l'unità di misura del peso
|
|
//leggo e controllo il peso dell'articolo
|
|
const TString4 ump = art.get(ANAMAG_UMP);
|
|
const real peso = art.get_real(ANAMAG_PESO);
|
|
|
|
if (ump.full() && peso != ZERO)
|
|
{
|
|
//preparo una cache sulla tabella delle unità di misura
|
|
const TRectype& unita = cache().get("%UMS", ump);
|
|
//leggo e controllo se esiste l'unità di misura di riferimento
|
|
const TString4 umrif = unita.get("S7");
|
|
real fatconv = UNO;
|
|
|
|
if (umrif == _umkg)
|
|
{
|
|
//leggo e controllo il fattore di conversione
|
|
fatconv = unita.get_real("R10");
|
|
}
|
|
if (fatconv != ZERO)
|
|
{
|
|
//se tutti i controlli sono andati a buon fine, converto la quantità e la restituisco
|
|
const real qtaconv = qta * fatconv * peso;
|
|
var = qtaconv;
|
|
}
|
|
}
|
|
/* else da decidere se gestire
|
|
{
|
|
//preparo una cache sulla tabella delle unità di misura
|
|
const TRectype& unita = cache().get("%UMS", art.first_um());
|
|
//leggo e controllo se esiste l'unità di misura di riferimento
|
|
const TString4 umrif = unita.get("S7");
|
|
|
|
if (umrif == _umkg)
|
|
{
|
|
//leggo e controllo il fattore di conversione
|
|
const real fatconv = unita.get_real("R10");
|
|
if (fatconv != ZERO)
|
|
{
|
|
//se tutti i controlli sono andati a buon fine, converto la quantità e la restituisco
|
|
const real qtaconv = qta * fatconv * peso;
|
|
var = qtaconv;
|
|
}
|
|
}
|
|
} */
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
else
|
|
return TReport::get_usr_val(name, var);
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TStampa_a_kg_app
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TStampa_a_kg_app: public TSkeleton_application
|
|
{
|
|
TStampa_a_kg_msk* _msk;
|
|
|
|
protected:
|
|
virtual bool create();
|
|
virtual bool destroy();
|
|
|
|
void prepara_recordset(TStampa_a_kg_rep & rep) const;
|
|
|
|
public:
|
|
virtual void main_loop();
|
|
};
|
|
|
|
//CREATE: metodo costruttore
|
|
bool TStampa_a_kg_app::create()
|
|
{
|
|
_msk = new TStampa_a_kg_msk;
|
|
return TSkeleton_application::create();
|
|
}
|
|
|
|
//DESTROY: metodo distruttore
|
|
bool TStampa_a_kg_app::destroy()
|
|
{
|
|
delete _msk;
|
|
return TApplication::destroy();
|
|
}
|
|
|
|
//PREPARA_RECORDSET: metodo che estre tutte le righe documento in base ai criteri selezionati
|
|
void TStampa_a_kg_app::prepara_recordset(TStampa_a_kg_rep & rep) const
|
|
{
|
|
const TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN");
|
|
|
|
const int raggruppa = _msk->get_int(F_RAGX);
|
|
const bool datadog = _msk->get_int(F_DATADOG) == 0 ? true : false;
|
|
|
|
const TDate dadata = _msk->get_date(F_DADATA);
|
|
const TDate adata = _msk->get_date(F_ADATA);
|
|
|
|
const long daanno = dadata.year();
|
|
const long aanno = adata.year();
|
|
|
|
TString query;
|
|
query << "USE RDOC\n";
|
|
if(datadog)
|
|
query << "SELECT (BETWEEN(33.DATADOC,#DADATA,#ADATA))";
|
|
else
|
|
query << "SELECT (BETWEEN(33.G1:DATAGEN,#DADATA,#ADATA))";
|
|
// query << "&&(TIPORIGA!=\"05\")&&(33.TIPOCF=\"C\")";
|
|
query << "&&(33.TIPOCF=\"C\")";
|
|
switch(raggruppa)
|
|
{
|
|
case 1: query << "&&(STR(BETWEEN(33.CODCF,#DACODCF,#ACODCF)))\nBY 33.CODCF CODART\n"; break;
|
|
case 2: query << "&&(STR(BETWEEN(33.G1:CODITI,#DAITI,#AITI)))\nBY 33.G1:CODITI[1,3] CODART\n"; break;
|
|
case 3: query << "&&(STR(BETWEEN(33.CODAG,#DAAUT,#AAUT)))\nBY 33.CODAG CODART\n"; break;
|
|
default: query << "\nBY CODART\n"; break;
|
|
}
|
|
query << "JOIN DOC INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC\n"
|
|
<< "JOIN ANAMAG INTO CODART==CODART\n"
|
|
<< "FROM CODNUM=#CODNUM ANNO=#DAANNO\n"
|
|
<< "TO CODNUM=#CODNUM ANNO=#AANNO\n";
|
|
|
|
rep.set_recordset(query);
|
|
|
|
TRecordset * righedoc = rep.recordset();
|
|
|
|
righedoc->set_var("#DADATA", dadata);
|
|
righedoc->set_var("#ADATA", adata);
|
|
righedoc->set_var("#DAANNO", daanno);
|
|
righedoc->set_var("#AANNO", aanno);
|
|
righedoc->set_var("#CODNUM", codnum);
|
|
|
|
switch(raggruppa)
|
|
{
|
|
case 1:
|
|
righedoc->set_var("#DACODCF", _msk->get_long(F_DACODCF));
|
|
righedoc->set_var("#ACODCF", _msk->get_long(F_ACODCF));
|
|
break;
|
|
case 2:
|
|
righedoc->set_var("#DAITI", _msk->get(F_DACODITI));
|
|
righedoc->set_var("#AITI", _msk->get(F_ACODITI));
|
|
break;
|
|
case 3:
|
|
righedoc->set_var("#DAAUT", _msk->get(F_DACODAUT).right(5));
|
|
righedoc->set_var("#AAUT", _msk->get(F_ACODAUT).right(5));
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void TStampa_a_kg_app::main_loop()
|
|
{
|
|
KEY k;
|
|
while ((k = _msk->run()) == K_ENTER || k == 'A')
|
|
{
|
|
TStampa_a_kg_rep rep;
|
|
const int raggruppa = _msk->get_int(F_RAGX);
|
|
bool ok;
|
|
switch (raggruppa)
|
|
{
|
|
case 1:
|
|
ok = rep.load("lv1200b");
|
|
break;
|
|
case 2:
|
|
ok = rep.load("lv1200c");
|
|
break;
|
|
case 3:
|
|
ok = rep.load("lv1200d");
|
|
break;
|
|
default:
|
|
ok = rep.load("lv1200e");
|
|
break;
|
|
}
|
|
prepara_recordset(rep);
|
|
TReport_book book;
|
|
ok = book.add(rep);
|
|
if (ok)
|
|
{
|
|
if (k == 'A')
|
|
book.preview();
|
|
else
|
|
book.print();
|
|
}
|
|
}
|
|
}
|
|
|
|
int lv1200(int argc, char *argv[])
|
|
{
|
|
TStampa_a_kg_app a;
|
|
a.run (argc, argv, "Stampa a Kg");
|
|
return TRUE;
|
|
}
|