2009-09-11 16:33:38 +00:00
|
|
|
|
#include <execp.h>
|
|
|
|
|
|
2008-12-01 14:41:05 +00:00
|
|
|
|
#include "../ve/ve0100.h"
|
|
|
|
|
#include "../ve/veini.h"
|
|
|
|
|
#include "../ve/veuml.h"
|
2009-02-20 14:22:19 +00:00
|
|
|
|
#include "../ve/veuml3.h"
|
2008-12-03 12:15:09 +00:00
|
|
|
|
#include "../ve/verig.h"
|
2008-12-04 15:51:02 +00:00
|
|
|
|
#include "../ve/vepriv.h"
|
2008-12-01 14:41:05 +00:00
|
|
|
|
|
|
|
|
|
#include "lvlib.h"
|
|
|
|
|
#include "lvcondv.h"
|
|
|
|
|
#include "lvrcondv.h"
|
2009-02-09 13:34:58 +00:00
|
|
|
|
#include "lvrconsplan.h"
|
2009-01-23 10:36:46 +00:00
|
|
|
|
#include "../mg/clifogiac.h"
|
2009-08-11 14:30:18 +00:00
|
|
|
|
#include "../ve/rcondv.h"
|
2008-12-01 14:41:05 +00:00
|
|
|
|
|
2009-02-16 10:00:06 +00:00
|
|
|
|
#define FOR_EACH_DOC_ROW_BACK(d, r, row) const TRiga_documento* row = NULL; for (int r = d.rows(); r > 0 && (row = &d[r]) != NULL; r--)
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////
|
|
|
|
|
//// CLASSE TGESTIONE_BOLLE_MSK ////
|
|
|
|
|
//////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
//Definizione della classe della maschera
|
|
|
|
|
class TGestione_bolle_msk : public TDocumento_mask
|
|
|
|
|
{
|
2009-02-23 11:51:11 +00:00
|
|
|
|
long _stcodcf;
|
|
|
|
|
long _stcodcont;
|
2009-02-16 10:00:06 +00:00
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
static void arrotonda(const TMask& msk, real& quantita);
|
2009-02-20 14:22:19 +00:00
|
|
|
|
static void dettaglio_causale(TSheet_field& ss);
|
|
|
|
|
|
2009-02-16 10:00:06 +00:00
|
|
|
|
//hanlder di documento:
|
2009-03-18 15:26:57 +00:00
|
|
|
|
static bool lv_data_handler(TMask_field& f, KEY k);
|
|
|
|
|
static bool lv_contratto_handler(TMask_field& f, KEY k);
|
2009-07-27 17:41:07 +00:00
|
|
|
|
static bool lv_dataprco_handler(TMask_field& f, KEY k);
|
|
|
|
|
static bool lv_bolla_handler(TMask_field& f, KEY k);
|
2009-02-16 10:00:06 +00:00
|
|
|
|
//handler di riga:
|
|
|
|
|
static bool lv_ritirato_handler(TMask_field& f, KEY k);
|
|
|
|
|
static bool lv_consegnato_handler(TMask_field& f, KEY k);
|
|
|
|
|
static bool lv_codart_handler(TMask_field& f, KEY k);
|
|
|
|
|
static bool lv_causale_handler(TMask_field& f, KEY k);
|
2009-03-02 16:08:37 +00:00
|
|
|
|
static bool lv_codmag_handler(TMask_field& f, KEY k);
|
2009-06-04 14:55:33 +00:00
|
|
|
|
static bool lv_datatmp_handler(TMask_field& f, KEY k);
|
2009-02-16 10:00:06 +00:00
|
|
|
|
|
|
|
|
|
static bool ss_notify(TSheet_field& ss, int r, KEY key);
|
2009-06-04 10:20:33 +00:00
|
|
|
|
static bool ss_handler(TMask_field& f, KEY key);
|
2009-02-16 10:00:06 +00:00
|
|
|
|
|
|
|
|
|
virtual void on_idle();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
virtual void user_set_handler( short fieldid, int index);
|
|
|
|
|
virtual void user_set_row_handler(TMask& rm, short field, int index);
|
|
|
|
|
void reset_var_mask() {_stcodcf = 0; _stcodcont = 0;}
|
2009-08-06 15:32:02 +00:00
|
|
|
|
TDate proponi_dataprco() const;
|
2009-02-16 10:00:06 +00:00
|
|
|
|
TGestione_bolle_msk(const char* tipodoc);
|
|
|
|
|
|
|
|
|
|
int _autoselect;
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
////////////////////////////////////
|
|
|
|
|
//// CLASSE TGIAC_PER_CLI ////
|
|
|
|
|
////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
//Definizione della classe Giacenza per Cliente
|
|
|
|
|
class TGiac_per_cli : public TObject
|
2008-12-01 14:41:05 +00:00
|
|
|
|
{
|
2009-01-23 10:36:46 +00:00
|
|
|
|
private:
|
|
|
|
|
TAssoc_array _odierna; //TAssoc_array che conterr<72> le dotazioni odierne
|
|
|
|
|
TAssoc_array _temporanea; //TAssoc_array che conterr<72> le dotazioni temporanee
|
|
|
|
|
long _clifo; //variabile che conterr<72> il cliente selezionato
|
|
|
|
|
long _cont; //variabile che conterr<72> il contratto selezionato
|
|
|
|
|
int _year; //variabile che conterr<72> l'anno documento
|
|
|
|
|
long _indsped; //variabile che conterr<72> l'indirizzo di spedizione
|
|
|
|
|
|
2008-12-01 14:41:05 +00:00
|
|
|
|
protected:
|
2009-01-23 10:36:46 +00:00
|
|
|
|
real& giacart_od(const TString& codart); //restituisce un puntatore al valore della dot. od. salvato
|
|
|
|
|
real& giacart_tmp(const TString& codart); //restituisce un puntatore al valore valore della dot. temp. salvato
|
|
|
|
|
long giac_in_mag(const TString& codart, bool odierna) const; //restituisce il valore salvato nel magazzino
|
|
|
|
|
|
|
|
|
|
public:
|
2009-03-02 16:08:37 +00:00
|
|
|
|
bool preset(const TDocumento& doc); //precarico le variabili globali della classe
|
2009-01-23 10:36:46 +00:00
|
|
|
|
bool reset(const TDocumento& doc); //svuota i TAssoc_array e carica cli e cont
|
|
|
|
|
bool load_row(const TRiga_documento& rdoc); //popola i TAssoc_array
|
2009-01-24 12:09:50 +00:00
|
|
|
|
real giac_att(TRiga_documento& rdoc, bool odierna); //restituisce le quantit<69> attuali di dotazione
|
2009-01-23 10:36:46 +00:00
|
|
|
|
TGiac_per_cli(); //costruttore
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//GIACART_OD: metodo che restituisce un puntatore al real che contiene il valore
|
|
|
|
|
//della dotazione odierna per un determinato articolo
|
|
|
|
|
real& TGiac_per_cli::giacart_od(const TString& codart)
|
|
|
|
|
{
|
|
|
|
|
real *giac = (real*)_odierna.objptr(codart);
|
|
|
|
|
if (giac == NULL)
|
|
|
|
|
{
|
|
|
|
|
giac = new real(giac_in_mag(codart, true));
|
|
|
|
|
_odierna.add(codart,giac);
|
|
|
|
|
}
|
|
|
|
|
return *giac;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//GIACART_TMP: metodo che restituisce un puntatore al real che contiene il valore
|
|
|
|
|
//della dotazione temporanea per un determinato articolo
|
|
|
|
|
real& TGiac_per_cli::giacart_tmp(const TString& codart)
|
|
|
|
|
{
|
|
|
|
|
real *giac = (real*)_temporanea.objptr(codart);
|
|
|
|
|
if (giac == NULL)
|
|
|
|
|
{
|
|
|
|
|
giac = new real(giac_in_mag(codart, false));
|
|
|
|
|
_temporanea.add(codart,giac);
|
|
|
|
|
}
|
|
|
|
|
return *giac;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//GIAC_IN_MAG: questo metodo restituisce le quantit<69> presenti sul file 166 (clifogiac)
|
|
|
|
|
//restituendo il valore salvato in dotazione odierna se odierna == true,
|
|
|
|
|
//oppure il valore salvato in dotazione temporanea se odierna = false
|
|
|
|
|
long TGiac_per_cli::giac_in_mag(const TString& codart, bool odierna) const
|
|
|
|
|
{
|
|
|
|
|
//recupero i valori delle dotazioni odierne e temporanee dal magazzino del cliente
|
|
|
|
|
TLocalisamfile magcli(LF_CLIFOGIAC);
|
2009-05-25 09:58:40 +00:00
|
|
|
|
magcli.put(CLIFOGIAC_ANNOES, _year);
|
|
|
|
|
magcli.put(CLIFOGIAC_TIPOCF, 'C');
|
|
|
|
|
magcli.put(CLIFOGIAC_CODCF, _clifo);
|
2009-01-23 10:36:46 +00:00
|
|
|
|
magcli.put(CLIFOGIAC_INDSPED, _indsped);
|
2009-05-25 09:58:40 +00:00
|
|
|
|
magcli.put(CLIFOGIAC_CODART, codart);
|
|
|
|
|
magcli.put(CLIFOGIAC_NRIGA, 1);
|
2009-01-23 10:36:46 +00:00
|
|
|
|
|
|
|
|
|
//leggo il record corrispondente
|
|
|
|
|
if (magcli.read() == NOERR)
|
|
|
|
|
return magcli.get_long( odierna ? CLIFOGIAC_DOTOD : CLIFOGIAC_DOTTM);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2009-03-02 16:08:37 +00:00
|
|
|
|
//PRESET: metodo che carica la coppia cliente - contratto
|
|
|
|
|
bool TGiac_per_cli::preset(const TDocumento& doc)
|
2009-01-23 10:36:46 +00:00
|
|
|
|
{
|
|
|
|
|
//estraggo i dati di interesse dal documento
|
|
|
|
|
_clifo = doc.get_long(DOC_CODCF);
|
|
|
|
|
_cont = doc.get_long(DOC_CODCONT);
|
|
|
|
|
_year = doc.get_date(DOC_DATADOC).year();
|
|
|
|
|
_indsped = doc.get_long(DOC_CODINDSP);
|
|
|
|
|
|
2009-03-02 16:08:37 +00:00
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//RESET: metodo che distrugge i due TAssoc_array e carica la coppia cliente - contratto
|
|
|
|
|
bool TGiac_per_cli::reset(const TDocumento& doc)
|
|
|
|
|
{
|
|
|
|
|
preset(doc);
|
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
//distruggo i due TAssoc_array
|
|
|
|
|
_odierna.destroy();
|
|
|
|
|
_temporanea.destroy();
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//LOAD_ROW: questo metodo popola e aggiorna i TAssoc_array
|
|
|
|
|
bool TGiac_per_cli::load_row(const TRiga_documento& rdoc)
|
|
|
|
|
{
|
|
|
|
|
//recupero il documento e la sua maschera a partire dalla riga documento
|
|
|
|
|
const TDocumento& doc = rdoc.doc();
|
2009-01-24 12:09:50 +00:00
|
|
|
|
real vardot;
|
|
|
|
|
real vartmp;
|
2009-01-23 10:36:46 +00:00
|
|
|
|
|
|
|
|
|
//se sul documento leggo o il cliente o il contratto o l'indirizzo di spedizione
|
|
|
|
|
//diversi da quelli che avevo salvato vuol dire che ho cambiato uno dei due,
|
|
|
|
|
//e quindi le giacenze non vanno pi<70> bene; in tal caso resetto i TAssoc_array e riparto
|
|
|
|
|
if (doc.get_long(DOC_CODCF) != _clifo || doc.get_long(DOC_CODCONT) != _cont || doc.get_long(DOC_CODINDSP) != _indsped)
|
|
|
|
|
reset(doc);
|
|
|
|
|
|
|
|
|
|
real& dotazione = giacart_od(rdoc.get(RDOC_CODART));
|
2009-01-24 12:09:50 +00:00
|
|
|
|
real& dotmp = giacart_tmp(rdoc.get(RDOC_CODART));
|
2009-01-23 10:36:46 +00:00
|
|
|
|
|
2009-01-24 12:09:50 +00:00
|
|
|
|
//instanzio una cache sulla tabella delle causali
|
2009-05-25 09:58:40 +00:00
|
|
|
|
const TString4 causale = rdoc.get(RDOC_CODAGG1);
|
|
|
|
|
const TCausale_lavanderie cau(causale);
|
2009-01-23 10:36:46 +00:00
|
|
|
|
|
|
|
|
|
//movimento o meno la dotazione temporanea a seconda di cosa prevede la causale
|
2009-05-25 09:58:40 +00:00
|
|
|
|
if (cau.is_ritiro())
|
2009-01-23 10:36:46 +00:00
|
|
|
|
{
|
2009-05-25 09:58:40 +00:00
|
|
|
|
const TCausale_magazzino& rit = cau.causale_ritiro();
|
2009-01-24 14:14:13 +00:00
|
|
|
|
const real & ritirato = rdoc.get_real(RDOC_QTAGG1);
|
|
|
|
|
int st = rit.sgn(s_dottm);
|
|
|
|
|
int so = rit.sgn(s_dotod);
|
2009-01-24 12:09:50 +00:00
|
|
|
|
|
2009-01-24 14:14:13 +00:00
|
|
|
|
vartmp += real(st) * ritirato;
|
|
|
|
|
vardot += real(so) * ritirato;
|
2009-01-24 12:09:50 +00:00
|
|
|
|
}
|
2009-05-25 09:58:40 +00:00
|
|
|
|
if (cau.is_consegna())
|
2009-01-24 12:09:50 +00:00
|
|
|
|
{
|
2009-05-25 09:58:40 +00:00
|
|
|
|
const TCausale_magazzino& con = cau.causale_consegna();
|
2009-01-24 14:14:13 +00:00
|
|
|
|
const real & consegnato = rdoc.get_real(RDOC_QTA);
|
|
|
|
|
int st = con.sgn(s_dottm);
|
|
|
|
|
int so = con.sgn(s_dotod);
|
2009-01-24 12:09:50 +00:00
|
|
|
|
|
2009-01-24 14:14:13 +00:00
|
|
|
|
vartmp += real(st) * consegnato;
|
|
|
|
|
vardot += real(so) * consegnato;
|
2009-01-24 12:09:50 +00:00
|
|
|
|
}
|
2009-01-24 14:39:15 +00:00
|
|
|
|
|
|
|
|
|
if (rdoc.get_int(RDOC_MOVMAG) != ZERO)
|
|
|
|
|
{
|
|
|
|
|
dotmp -= vartmp;
|
|
|
|
|
dotazione -= vardot;
|
|
|
|
|
}
|
2009-01-23 10:36:46 +00:00
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//GIAC_ATT: questo metodo restituisce il valore della dotazione da scrivere a video in base ai valori
|
|
|
|
|
//di consegnato e ritirato; ATTENZIONE: restituisce la dotazione odierna se odierna = true,
|
|
|
|
|
//restituisce la dotazione temporanea se odierna = false
|
2009-01-24 12:09:50 +00:00
|
|
|
|
real TGiac_per_cli::giac_att(TRiga_documento& rdoc, bool odierna)
|
2009-01-23 10:36:46 +00:00
|
|
|
|
{
|
|
|
|
|
const TString& codart = rdoc.get(RDOC_CODART);
|
|
|
|
|
|
2009-01-24 12:09:50 +00:00
|
|
|
|
real giac = odierna ? giacart_od(codart) : giacart_tmp(codart);
|
|
|
|
|
real saldo;
|
|
|
|
|
|
|
|
|
|
//instanzio una cache sulla tabella delle causali
|
|
|
|
|
TString4 causale = rdoc.get(RDOC_CODAGG1);
|
2009-05-25 09:58:40 +00:00
|
|
|
|
const TCausale_lavanderie cau(causale);
|
2009-01-24 12:09:50 +00:00
|
|
|
|
|
|
|
|
|
//movimento o meno la dotazione temporanea/odierna a seconda di cosa prevede la causale
|
2009-05-25 09:58:40 +00:00
|
|
|
|
if (cau.is_ritiro())
|
2009-01-24 12:09:50 +00:00
|
|
|
|
{
|
2009-05-25 09:58:40 +00:00
|
|
|
|
const TCausale_magazzino& rit = cau.causale_ritiro();
|
2009-01-24 14:14:13 +00:00
|
|
|
|
const int s = rit.sgn(odierna ? s_dotod : s_dottm);
|
2009-07-29 13:02:48 +00:00
|
|
|
|
|
2009-01-24 14:14:13 +00:00
|
|
|
|
saldo += real(s) * rdoc.get_real(RDOC_QTAGG1);
|
2009-01-24 12:09:50 +00:00
|
|
|
|
}
|
2009-05-25 09:58:40 +00:00
|
|
|
|
if (cau.is_consegna())
|
2009-01-24 12:09:50 +00:00
|
|
|
|
{
|
2009-05-25 09:58:40 +00:00
|
|
|
|
const TCausale_magazzino& con = cau.causale_consegna();
|
2009-01-24 14:14:13 +00:00
|
|
|
|
const int s = con.sgn(odierna ? s_dotod : s_dottm);
|
2009-07-29 13:02:48 +00:00
|
|
|
|
|
|
|
|
|
saldo += real(s) * rdoc.get_real(RDOC_QTA);
|
2009-01-24 12:09:50 +00:00
|
|
|
|
}
|
2009-01-23 10:36:46 +00:00
|
|
|
|
giac += saldo;
|
|
|
|
|
|
|
|
|
|
return giac;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//costruttore
|
|
|
|
|
TGiac_per_cli::TGiac_per_cli()
|
|
|
|
|
{
|
2009-03-02 16:08:37 +00:00
|
|
|
|
//estraggo i dati di interesse dal documento
|
2009-01-23 10:36:46 +00:00
|
|
|
|
_clifo = 0;
|
|
|
|
|
_cont = 0;
|
|
|
|
|
_year = 0;
|
|
|
|
|
_indsped = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////
|
|
|
|
|
//// CLASSE TGESTIONE_BOLLE_APP ////
|
|
|
|
|
//////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
// Definizione della classe dell'applicazione motore
|
|
|
|
|
class TGestione_bolle_app : public TMotore_application
|
|
|
|
|
{
|
|
|
|
|
TGiac_per_cli _giac;
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual TMask* get_mask( int mode );
|
|
|
|
|
virtual int write( const TMask& m );
|
|
|
|
|
virtual int rewrite( const TMask& m );
|
|
|
|
|
virtual int read ( TMask& m );
|
|
|
|
|
virtual void init_insert_mode( TMask& m );
|
2009-08-21 08:21:37 +00:00
|
|
|
|
virtual void init_modify_mode( TMask& m );
|
|
|
|
|
|
2009-02-03 15:47:58 +00:00
|
|
|
|
void elimina_vuote( const TMask& m);
|
2009-07-27 15:05:05 +00:00
|
|
|
|
virtual const char * query_mask_name() { return "lv3100a"; }
|
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
TGiac_per_cli& giacenza();
|
|
|
|
|
TGestione_bolle_app() {}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
inline TGestione_bolle_app& gbapp() { return (TGestione_bolle_app &)main_app(); };
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////
|
|
|
|
|
//// CLASSE TGESTIONE_BOLLE_MSK ////
|
|
|
|
|
//////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
//ARROTONDA: metodo che arrotonda la quantit<69> che gli passo se <20> previsto sul contratto
|
2008-12-04 15:51:02 +00:00
|
|
|
|
void TGestione_bolle_msk::arrotonda(const TMask& msk, real& quantita)
|
|
|
|
|
{
|
2009-08-21 08:21:37 +00:00
|
|
|
|
int perarr = ini_get_int(CONFIG_DITTA, "lv", "Perarr");
|
2009-01-23 10:36:46 +00:00
|
|
|
|
|
2008-12-04 15:51:02 +00:00
|
|
|
|
const TString& codart = msk.get(FR_CODART);
|
|
|
|
|
//instanzio una cache sulla tabella del magazzino
|
|
|
|
|
const TRectype& anamag = cache().get(LF_ANAMAG,codart);
|
|
|
|
|
//recupero i dati di interesse dall'anagrafica di magazzino
|
|
|
|
|
const long ppconf = anamag.get_long(ANAMAG_PPCONF);
|
|
|
|
|
if (ppconf > 0)
|
|
|
|
|
{
|
|
|
|
|
TDocumento_mask& dmsk = (TDocumento_mask&) msk.get_sheet()->mask();
|
|
|
|
|
|
|
|
|
|
//recupero dal documento i dati di interesse per recuperare...
|
|
|
|
|
//...i dati dalla riga contratto
|
|
|
|
|
const long codcf = dmsk.get_long(F_CODCF);
|
|
|
|
|
const int indsped = dmsk.get_int(F_CODINDSP);
|
|
|
|
|
TDate datadoc = dmsk.get_date(F_DATADOC);
|
|
|
|
|
if (!datadoc.ok())
|
|
|
|
|
datadoc = TODAY;
|
|
|
|
|
|
|
|
|
|
const TLaundry_contract cont(codcf, indsped, datadoc);
|
|
|
|
|
//leggo la riga del contratto per l'articolo corrente
|
|
|
|
|
const TRectype& rcont = cont.row(codart);
|
|
|
|
|
//recupero i dati di interesse dalla riga del contratto
|
2009-06-11 16:20:51 +00:00
|
|
|
|
if (rcont.get_int(LVRCONDV_CALCCONS) == 1)
|
2008-12-04 15:51:02 +00:00
|
|
|
|
{
|
|
|
|
|
//calcolo di quanti pezzi sforo
|
2009-01-23 10:36:46 +00:00
|
|
|
|
long arr = quantita.integer() % ppconf;
|
2008-12-04 15:51:02 +00:00
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
//calcolo quanti pezzi in pi<70> o in meno gli devo dare e aggiorno la quantit<69>
|
|
|
|
|
if (arr > ppconf * perarr / 100) //arr <= ppconf*perarr/100 -> formula calcolo congualgio di Tassan
|
|
|
|
|
{
|
|
|
|
|
arr = ppconf - arr;
|
|
|
|
|
quantita += arr;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
quantita -= arr;
|
2008-12-03 12:15:09 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2008-12-04 15:51:02 +00:00
|
|
|
|
}
|
|
|
|
|
|
2009-02-20 14:22:19 +00:00
|
|
|
|
//DETTAGLIO_CAUSALE: metodo che setta esplode la causale negli appositi campi
|
|
|
|
|
void TGestione_bolle_msk::dettaglio_causale(TSheet_field& ss)
|
|
|
|
|
{
|
|
|
|
|
TGestione_bolle_msk& dmsk = (TGestione_bolle_msk&) ss.mask();
|
|
|
|
|
TString4 causale = ss.cell(ss.selected(),ss.cid2index(FR_CODAGG1));
|
|
|
|
|
|
|
|
|
|
//instanzio una cache sulle causali
|
2009-05-25 09:58:40 +00:00
|
|
|
|
const TCausale_lavanderie cau(causale);
|
2009-02-20 14:22:19 +00:00
|
|
|
|
//esplodo la causale
|
2009-05-25 09:58:40 +00:00
|
|
|
|
dmsk.set(F_LVCODCAU, cau.codice());
|
|
|
|
|
dmsk.set(F_LVDESCAU, cau.descr());
|
2009-02-20 14:22:19 +00:00
|
|
|
|
}
|
|
|
|
|
|
2009-08-06 15:32:02 +00:00
|
|
|
|
//PROPONI_DATAPRCO: metodo che propone la prima data di prevista consegna
|
|
|
|
|
TDate TGestione_bolle_msk::proponi_dataprco() const
|
|
|
|
|
{
|
|
|
|
|
const TDate dadata = get(F_DATADOC);
|
|
|
|
|
TDate dataprco(0,0,0);
|
|
|
|
|
|
|
|
|
|
if (dadata.ok())
|
|
|
|
|
{
|
|
|
|
|
TDate adata = dadata;
|
|
|
|
|
adata.addmonth(1);
|
|
|
|
|
|
|
|
|
|
TString query = "USE LVRCONSPLAN KEY 3\n";
|
|
|
|
|
query << "FROM CODCF=" << get(F_CODCF) << " CODCONT=" << get(F_LVCODCONT) << " DTCONS=" << dadata << "\n";
|
|
|
|
|
query << "TO CODCF=" << get(F_CODCF) << " CODCONT=" << get(F_LVCODCONT) << " DTCONS=" << adata << "\n";
|
|
|
|
|
TISAM_recordset consegne(query);
|
|
|
|
|
|
2009-09-11 08:35:41 +00:00
|
|
|
|
if (consegne.items() >= 2)
|
|
|
|
|
{
|
|
|
|
|
consegne.move_to(1);
|
2009-08-06 15:32:02 +00:00
|
|
|
|
dataprco = consegne.get(LVRCONSPLAN_DTCONS).as_date();
|
2009-09-11 08:35:41 +00:00
|
|
|
|
}
|
2009-08-06 15:32:02 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return dataprco;
|
|
|
|
|
}
|
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
////////////////////////////
|
|
|
|
|
// HANDLER DI DOCUMENTO //
|
|
|
|
|
////////////////////////////
|
2008-12-04 15:51:02 +00:00
|
|
|
|
|
2009-01-27 10:19:18 +00:00
|
|
|
|
void TGestione_bolle_msk:: on_idle()
|
|
|
|
|
{
|
|
|
|
|
TDocumento_mask::on_idle();
|
|
|
|
|
if (_autoselect >= 0)
|
|
|
|
|
{
|
|
|
|
|
TSheet_field& s = sfield(F_SHEET);
|
2009-01-29 11:49:02 +00:00
|
|
|
|
//per ora 4 fisso perch<63> non sappiamo calcolare la colonna del ritirato
|
2009-02-25 16:54:21 +00:00
|
|
|
|
s.set_focus_cell_id(_autoselect, FR_QTAGG1);
|
2009-01-29 11:41:10 +00:00
|
|
|
|
_autoselect = -1;
|
2009-02-20 14:22:19 +00:00
|
|
|
|
dettaglio_causale(s);
|
2009-01-27 10:19:18 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-01-29 11:49:02 +00:00
|
|
|
|
//magico metodo per settare, al cambio riga dello sheet, il focus sul campo desiderato (il campo in questione <20>..
|
|
|
|
|
//..definito nella on_idle(); ricordarsi la set_notify() nel costruttore della maschera senno' viene eseguito l'ss_notify()..
|
|
|
|
|
//..standard e non questo qui ridefinito. Allah!
|
2009-01-29 11:41:10 +00:00
|
|
|
|
bool TGestione_bolle_msk::ss_notify(TSheet_field& ss, int r, KEY key)
|
|
|
|
|
{
|
2009-02-20 14:22:19 +00:00
|
|
|
|
TGestione_bolle_msk& dmsk = (TGestione_bolle_msk&) ss.mask();
|
|
|
|
|
|
|
|
|
|
if (key == K_TAB && dmsk._autoselect == -1)
|
|
|
|
|
dmsk._autoselect = ss.selected(); //riga per settare il focus
|
2009-03-04 15:17:58 +00:00
|
|
|
|
|
2009-01-29 11:49:02 +00:00
|
|
|
|
return TDocumento_mask::ss_notify(ss, r, key);
|
2009-01-29 11:41:10 +00:00
|
|
|
|
}
|
|
|
|
|
|
2009-06-04 10:20:33 +00:00
|
|
|
|
|
|
|
|
|
//SS_HANDLER: handler che mi peremette di evitare la registrazione in caso di documento
|
|
|
|
|
//senza righe valide (cio<69> con quantit<69> diverese da zero)
|
|
|
|
|
bool TGestione_bolle_msk::ss_handler(TMask_field& f, KEY key)
|
|
|
|
|
{
|
|
|
|
|
if ((key == K_ENTER) && f.mask().insert_mode())
|
|
|
|
|
{
|
|
|
|
|
TSheet_field& ss = (TSheet_field&)f;
|
|
|
|
|
|
|
|
|
|
bool vuote = true;
|
|
|
|
|
if (ss.items() > 0)
|
|
|
|
|
vuote = false;
|
|
|
|
|
|
|
|
|
|
if(!vuote)
|
|
|
|
|
{
|
|
|
|
|
vuote = true;
|
|
|
|
|
|
|
|
|
|
FOR_EACH_SHEET_ROW(ss, r, row)
|
|
|
|
|
{
|
|
|
|
|
if (row->get_int(ss.cid2index(FR_QTA)) != 0 || row->get_int(ss.cid2index(FR_QTAGG1)) != 0)
|
|
|
|
|
vuote = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!app().is_transaction() && vuote)
|
|
|
|
|
return error_box(TR("Il documento e' privo di righe valide e pertanto verr<72> ignorato"));
|
|
|
|
|
}
|
|
|
|
|
return TDocumento_mask::ss_handler(f, key);
|
|
|
|
|
}
|
|
|
|
|
|
2009-03-25 11:09:50 +00:00
|
|
|
|
//LV_DATA_HANDLER: handler che si occupa di decodificare i campi data in testata
|
2009-03-18 15:26:57 +00:00
|
|
|
|
bool TGestione_bolle_msk::lv_data_handler(TMask_field& f, KEY k)
|
2008-12-01 14:41:05 +00:00
|
|
|
|
{
|
2009-03-18 15:26:57 +00:00
|
|
|
|
bool ok = true;
|
|
|
|
|
|
2008-12-01 14:41:05 +00:00
|
|
|
|
switch(f.dlg())
|
2009-03-18 15:26:57 +00:00
|
|
|
|
{
|
2008-12-04 10:18:45 +00:00
|
|
|
|
case F_DATADOC: ok = data_hndl( f, k ); break;
|
|
|
|
|
default: break;
|
2008-12-01 14:41:05 +00:00
|
|
|
|
}
|
2009-03-18 15:26:57 +00:00
|
|
|
|
|
2009-01-23 17:12:52 +00:00
|
|
|
|
TGestione_bolle_msk& dmsk = (TGestione_bolle_msk&)f.mask();
|
2009-01-27 15:29:42 +00:00
|
|
|
|
|
|
|
|
|
TDate oggi(TODAY);
|
2009-03-18 15:26:57 +00:00
|
|
|
|
|
2009-02-20 14:22:19 +00:00
|
|
|
|
TDate primo = oggi;
|
|
|
|
|
primo.set_day(1);
|
|
|
|
|
|
2009-07-27 16:56:26 +00:00
|
|
|
|
|
|
|
|
|
if (dmsk.get_date(F_DATADOC) != oggi)
|
2009-03-25 11:09:50 +00:00
|
|
|
|
{
|
|
|
|
|
oggi = dmsk.get_date(F_DATADOC);
|
2009-04-24 13:55:05 +00:00
|
|
|
|
primo = oggi;
|
2009-03-25 11:09:50 +00:00
|
|
|
|
primo.set_day(1);
|
|
|
|
|
}
|
2009-02-20 14:22:19 +00:00
|
|
|
|
|
|
|
|
|
//decodifica del giorno della settimana
|
|
|
|
|
dmsk.set(F_LVGIORNO, itow(oggi.wday()));
|
2009-07-25 09:24:30 +00:00
|
|
|
|
//settimana del mese = settimana(oggi) - settimana(primo del mese) + 1
|
2009-02-20 14:22:19 +00:00
|
|
|
|
long tmp = oggi.week() - primo.week() + 1;
|
|
|
|
|
TString4 settimana;
|
|
|
|
|
settimana << tmp;
|
|
|
|
|
dmsk.set(F_LVSETTIMANA, settimana);
|
2009-01-27 15:29:42 +00:00
|
|
|
|
|
2009-03-18 15:26:57 +00:00
|
|
|
|
return ok;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//LV_CONTRATTO_HANDLER: handler che si occupa di riempire il campo contratto in testata
|
|
|
|
|
bool TGestione_bolle_msk::lv_contratto_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
TGestione_bolle_msk& dmsk = (TGestione_bolle_msk&)f.mask();
|
|
|
|
|
|
|
|
|
|
const long codcf = dmsk.get_long(F_CODCF);
|
|
|
|
|
const int indsped = dmsk.get_int(F_CODINDSP);
|
|
|
|
|
TDate datadoc = dmsk.get_date(F_DATADOC);
|
|
|
|
|
if (!datadoc.ok())
|
|
|
|
|
datadoc = TODAY;
|
|
|
|
|
const int anno = datadoc.year();
|
|
|
|
|
|
|
|
|
|
if (codcf <= 0)
|
|
|
|
|
return true;
|
|
|
|
|
|
2009-09-11 08:35:41 +00:00
|
|
|
|
long codcont = lv_find_contract(codcf, indsped, datadoc);
|
2009-03-18 15:26:57 +00:00
|
|
|
|
if (codcont <= 0)
|
|
|
|
|
{
|
|
|
|
|
warning_box(TR("Non ci sono contratti in essere alla data indicata"));
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
TString16 tmp;
|
|
|
|
|
tmp << codcont;
|
|
|
|
|
dmsk.set(F_LVCODCONT, tmp);
|
2009-08-06 15:32:02 +00:00
|
|
|
|
|
|
|
|
|
const TDate dataprco = dmsk.proponi_dataprco();
|
|
|
|
|
if (dataprco.ok() && dmsk.field(F_LVDATAPRCO).empty())
|
|
|
|
|
dmsk.set(F_LVDATAPRCO, dataprco);
|
2009-03-18 15:26:57 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TDocumento& doc = dmsk.doc();
|
|
|
|
|
doc.put(DOC_CODCONT, codcont);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-06 15:32:02 +00:00
|
|
|
|
//LV_DATAPRCO_HANDLER: handler che si occupa della gestione del campo "data di prevista consegna"
|
2009-07-27 17:41:07 +00:00
|
|
|
|
bool TGestione_bolle_msk::lv_dataprco_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
2009-08-06 15:32:02 +00:00
|
|
|
|
//se sto leggendo o generando un buono di ritiro, abilito questo campo
|
|
|
|
|
if (k == K_TAB)
|
|
|
|
|
{
|
|
|
|
|
TGestione_bolle_msk& dmsk = (TGestione_bolle_msk&)f.mask();
|
|
|
|
|
TDocumento& doc = dmsk.doc();
|
|
|
|
|
//se la data viene modificata a mano, controlla se <20> una data di previsto passaggio;
|
|
|
|
|
//se non lo <20> chiedi conferma se si desidera mantenre la data indicata manualmente o se
|
|
|
|
|
//<2F> meglio riproporre la data di previsto passaggio
|
|
|
|
|
if (!f.empty() && f.focusdirty() && doc.get_date("DATAPRCO") != (TDate)f.get())
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
doc.put("DATAPRCO", f.get());
|
|
|
|
|
|
|
|
|
|
TString query1 = "USE LVRCONSPLAN KEY 3\n";
|
|
|
|
|
query1 << "FROM CODCF=" << dmsk.get(F_CODCF) << " CODCONT=\"" << dmsk.get(F_LVCODCONT) << "\" DTCONS=" << f.get() << "\n";
|
|
|
|
|
query1 << "TO CODCF=" << dmsk.get(F_CODCF) << " CODCONT=\"" << dmsk.get(F_LVCODCONT) << "\" DTCONS=" << f.get() << "\n";
|
|
|
|
|
TISAM_recordset consegne(query1);
|
2009-07-27 17:41:07 +00:00
|
|
|
|
|
2009-08-06 15:32:02 +00:00
|
|
|
|
if (!consegne.move_first())
|
|
|
|
|
{
|
|
|
|
|
f.set_focusdirty(false);
|
|
|
|
|
|
|
|
|
|
if (!yesno_box(TR("Non <20> previsto nessun passaggio per questa data, confermi lo stesso?")))
|
|
|
|
|
{
|
|
|
|
|
const TDate dataprco = dmsk.proponi_dataprco();
|
|
|
|
|
if (dataprco.ok())
|
|
|
|
|
{
|
|
|
|
|
f.set(dataprco);
|
|
|
|
|
doc.put("DATAPRCO", dataprco);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-07-27 17:41:07 +00:00
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2009-03-18 15:26:57 +00:00
|
|
|
|
//LV_BOLLA_HANDLER: handler di bolla, carica le righe contratto sulle bolle, preparando la struttura del documento
|
|
|
|
|
bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
bool ok = true;
|
|
|
|
|
switch(f.dlg())
|
|
|
|
|
{
|
|
|
|
|
case F_CODCF: ok = TDocumento_mask::clifo_handler( f, k ); break;
|
|
|
|
|
default: break;
|
|
|
|
|
}
|
|
|
|
|
TGestione_bolle_msk& dmsk = (TGestione_bolle_msk&)f.mask();
|
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
if (ok && k == K_TAB && ((dmsk.insert_mode() && f.to_check(k, true)) || f.focusdirty()))
|
2009-06-16 16:10:30 +00:00
|
|
|
|
{
|
2008-12-10 16:57:03 +00:00
|
|
|
|
f.set_focusdirty(false);
|
|
|
|
|
|
2009-01-27 10:19:18 +00:00
|
|
|
|
TDocumento& doc = dmsk.doc();
|
2008-12-01 14:41:05 +00:00
|
|
|
|
|
2009-06-16 16:10:30 +00:00
|
|
|
|
TSheet_field& sheet = dmsk.sfield(F_SHEET);
|
2008-12-01 14:41:05 +00:00
|
|
|
|
int nrighe = sheet.items();
|
|
|
|
|
|
2008-12-10 16:57:03 +00:00
|
|
|
|
const long codcf = dmsk.get_long(F_CODCF);
|
|
|
|
|
const int indsped = dmsk.get_int(F_CODINDSP);
|
|
|
|
|
TDate datadoc = dmsk.get_date(F_DATADOC);
|
2008-12-01 14:41:05 +00:00
|
|
|
|
if (!datadoc.ok())
|
|
|
|
|
datadoc = TODAY;
|
|
|
|
|
const int anno = datadoc.year();
|
|
|
|
|
|
|
|
|
|
if (codcf <= 0)
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
const long codcont = lv_find_contract(codcf,indsped,datadoc);
|
2008-12-10 16:57:03 +00:00
|
|
|
|
if (codcont <= 0)
|
|
|
|
|
{
|
|
|
|
|
warning_box(TR("Non ci sono contratti in essere alla data indicata"));
|
|
|
|
|
return true;
|
|
|
|
|
}
|
2009-02-11 16:28:08 +00:00
|
|
|
|
else
|
2009-03-02 16:08:37 +00:00
|
|
|
|
{
|
|
|
|
|
doc.put(DOC_CODCF, codcf);
|
|
|
|
|
doc.put(DOC_DATADOC, datadoc);
|
|
|
|
|
doc.put(DOC_CODINDSP, indsped);
|
2009-02-11 16:28:08 +00:00
|
|
|
|
doc.put(DOC_CODCONT, codcont);
|
2009-08-06 15:32:02 +00:00
|
|
|
|
|
|
|
|
|
const TDate dataprco = dmsk.proponi_dataprco();
|
|
|
|
|
if (dataprco.ok() && dmsk.field(F_LVDATAPRCO).empty())
|
|
|
|
|
doc.put("DATAPRCO", dataprco);
|
2009-03-02 16:08:37 +00:00
|
|
|
|
}
|
2008-12-01 14:41:05 +00:00
|
|
|
|
|
2009-01-23 17:12:52 +00:00
|
|
|
|
if (dmsk._stcodcf == codcf && dmsk._stcodcont == codcont && nrighe > 0)
|
2008-12-01 14:41:05 +00:00
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
dmsk.mask2doc();
|
|
|
|
|
|
2009-01-23 17:12:52 +00:00
|
|
|
|
dmsk._stcodcf = codcf;
|
|
|
|
|
dmsk._stcodcont = codcont;
|
2008-12-01 14:41:05 +00:00
|
|
|
|
|
|
|
|
|
//elimino tutte le righe del documento
|
|
|
|
|
doc.destroy_rows();
|
|
|
|
|
|
|
|
|
|
//tipo riga
|
2008-12-10 16:57:03 +00:00
|
|
|
|
const TString& tprig = dmsk.get(F_LBTIPORIGA);
|
2008-12-01 14:41:05 +00:00
|
|
|
|
|
|
|
|
|
//instanzio una cache sulla tabella dei contratti
|
2008-12-04 10:18:45 +00:00
|
|
|
|
const TLaundry_contract tcont(codcf, codcont);
|
2008-12-01 14:41:05 +00:00
|
|
|
|
//estraggo i dati di interesse dalla cache
|
|
|
|
|
const int tplis = tcont.get_int(LVCONDV_TIPOLIS); //tipo listino
|
|
|
|
|
|
|
|
|
|
//instanzio un recordset sulle righe del contratto considerato
|
|
|
|
|
TISAM_recordset rcont("USE LVRCONDV\nFROM CODCF=#CODCF CODCONT=#CODCONT\nTO CODCF=#CODCF CODCONT=#CODCONT");
|
|
|
|
|
rcont.set_var("#CODCF",codcf);
|
|
|
|
|
rcont.set_var("#CODCONT",codcont);
|
|
|
|
|
|
2009-08-21 08:21:37 +00:00
|
|
|
|
//leggo dalla configurazione i codici magazzino e deposito standard
|
2009-03-02 16:08:37 +00:00
|
|
|
|
TString8 codmag;
|
2009-08-21 08:21:37 +00:00
|
|
|
|
codmag << ini_get_string(CONFIG_DITTA, "lv", "CODMAG") << ini_get_string(CONFIG_DITTA, "lv", "CODMAGC");
|
2009-03-02 16:08:37 +00:00
|
|
|
|
|
2008-12-01 14:41:05 +00:00
|
|
|
|
//per ogni riga estraggo l'articolo, il relativo prezzo e l'eventaule sconto da applicare,
|
|
|
|
|
//...riportati in bolla solo se necessario
|
|
|
|
|
for (bool ok = rcont.move_first(); ok; ok = rcont.move_next())
|
|
|
|
|
{
|
|
|
|
|
//creo una nuova riga documento
|
|
|
|
|
TRiga_documento& rdoc = doc.new_row(tprig);
|
|
|
|
|
|
|
|
|
|
//recupero i dati di interesse dalla riga del contratto e li inserisco sullo sheet
|
|
|
|
|
const TString80 codart = rcont.get(LVRCONDV_CODART).as_string();
|
2008-12-03 12:15:09 +00:00
|
|
|
|
|
2008-12-16 11:12:14 +00:00
|
|
|
|
TString4 causale = rcont.get(LVRCONDV_CAUSLAV).as_string();
|
|
|
|
|
|
2009-01-24 14:39:15 +00:00
|
|
|
|
if (causale.blank() || atoi(causale) == 0)
|
2009-08-21 08:21:37 +00:00
|
|
|
|
causale = ini_get_string(CONFIG_DITTA, "lv", "CAUSLAV");
|
2009-01-23 10:36:46 +00:00
|
|
|
|
|
|
|
|
|
//instanzio una cache sulle anagrafice di magazzino
|
|
|
|
|
const TRectype& anamag = cache().get(LF_ANAMAG,codart);
|
2009-02-09 16:39:34 +00:00
|
|
|
|
|
2009-06-11 16:56:44 +00:00
|
|
|
|
TToken_string key;
|
|
|
|
|
key.add(codart);
|
|
|
|
|
key.add(1);
|
|
|
|
|
const TRectype& umart = cache().get(LF_UMART, key);
|
|
|
|
|
|
2008-12-01 14:41:05 +00:00
|
|
|
|
rdoc.put(RDOC_CODART,codart);
|
|
|
|
|
rdoc.put(RDOC_CODARTMAG,codart);
|
|
|
|
|
rdoc.put(RDOC_CHECKED,'X');
|
2009-06-11 16:56:44 +00:00
|
|
|
|
rdoc.put(RDOC_DESCR, anamag.get(ANAMAG_DESCR));
|
|
|
|
|
rdoc.put(RDOC_UMQTA, umart.get(UMART_UM));
|
2008-12-16 11:12:14 +00:00
|
|
|
|
rdoc.put(RDOC_CODAGG1,causale);
|
2009-01-23 10:36:46 +00:00
|
|
|
|
rdoc.put(RDOC_CODIVA,anamag.get(ANAMAG_CODIVA));
|
2009-06-04 14:55:33 +00:00
|
|
|
|
|
|
|
|
|
TString8 codmagold = rdoc.get(RDOC_CODMAG);
|
|
|
|
|
if (codmagold.empty())
|
|
|
|
|
{
|
|
|
|
|
rdoc.put(RDOC_CODMAG, codmag);
|
|
|
|
|
rdoc.put(RDOC_CODMAGC, codmag);
|
|
|
|
|
}
|
2009-03-02 16:08:37 +00:00
|
|
|
|
|
|
|
|
|
//gestione campi dotazione odierna e dotazione temporanea
|
|
|
|
|
TGiac_per_cli& giac = gbapp().giacenza();
|
|
|
|
|
giac.preset(doc);
|
|
|
|
|
real dotod = giac.giac_att(rdoc, true);
|
|
|
|
|
rdoc.put("DOTOD", dotod);
|
2009-03-04 14:35:47 +00:00
|
|
|
|
real dotmp = giac.giac_att(rdoc, false);
|
|
|
|
|
rdoc.put("DOTMP", dotmp);
|
2009-03-02 16:08:37 +00:00
|
|
|
|
|
2008-12-01 14:41:05 +00:00
|
|
|
|
|
|
|
|
|
//elaborazione per il prezzo: o lo prendo dalle righe contratto, o dall'anagrafica magazzino
|
2008-12-19 12:00:01 +00:00
|
|
|
|
const TString& sconto = rcont.get(LVRCONDV_SCONTPERC).as_string();
|
|
|
|
|
rdoc.put(RDOC_SCONTO, sconto);
|
|
|
|
|
//controllo da dove devo prendere il prezzo
|
|
|
|
|
real prezzo;
|
2009-08-11 14:30:18 +00:00
|
|
|
|
|
2008-12-19 12:00:01 +00:00
|
|
|
|
if (tplis == 0)
|
|
|
|
|
prezzo = rcont.get(LVRCONDV_PREZZO).as_real();
|
|
|
|
|
else
|
|
|
|
|
prezzo = anamag.get_real(ANAMAG_COSTSTD);
|
2009-01-23 10:36:46 +00:00
|
|
|
|
rdoc.put(RDOC_PREZZO, prezzo);
|
2008-12-01 14:41:05 +00:00
|
|
|
|
}
|
|
|
|
|
dmsk.doc2mask(false);
|
|
|
|
|
|
|
|
|
|
FOR_EACH_MASK_FIELD(dmsk, i, f)
|
|
|
|
|
{
|
|
|
|
|
if (f->has_check())
|
|
|
|
|
f->check(STARTING_CHECK);
|
|
|
|
|
if (f->is_edit())
|
|
|
|
|
f->on_hit();
|
|
|
|
|
}
|
2009-01-27 10:19:18 +00:00
|
|
|
|
dmsk._autoselect = 0;
|
2008-12-01 14:41:05 +00:00
|
|
|
|
}
|
|
|
|
|
return ok;
|
|
|
|
|
}
|
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
///////////////////////
|
|
|
|
|
// HANDLER DI RIGA //
|
|
|
|
|
///////////////////////
|
|
|
|
|
|
|
|
|
|
//LV_RITIRATO_HANDLER: handler sul campo ritirato, che copia nel campo consegnato
|
|
|
|
|
//lo stesso valore eventualmente arrotondato e aggiorna il campo "dotazione odierna" (sempre)
|
|
|
|
|
//e il campo "dotazione temporanea" (se la causale <20> giusta)
|
|
|
|
|
bool TGestione_bolle_msk::lv_ritirato_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
2009-07-29 13:02:48 +00:00
|
|
|
|
if (f.to_check(k))
|
2009-01-23 10:36:46 +00:00
|
|
|
|
{
|
2009-09-18 09:25:21 +00:00
|
|
|
|
//maschera di riga
|
2009-01-23 10:36:46 +00:00
|
|
|
|
TMask& msk = f.mask();
|
2009-03-12 12:10:59 +00:00
|
|
|
|
|
2009-09-18 09:25:21 +00:00
|
|
|
|
//maschera di documento
|
|
|
|
|
TSheet_field* sheet = msk.get_sheet();
|
|
|
|
|
TDocumento_mask& dmask = (TDocumento_mask&)sheet->mask();
|
|
|
|
|
|
|
|
|
|
const long codcf = dmask.get_long(F_CODCF);
|
|
|
|
|
const int indsped = dmask.get_int(F_CODINDSP);
|
|
|
|
|
TDate datadoc = dmask.get_date(F_DATADOC);
|
|
|
|
|
if (!datadoc.ok())
|
|
|
|
|
datadoc = TODAY;
|
|
|
|
|
|
|
|
|
|
//recupero i valori della dotazione iniziale dal magazzino del cliente
|
|
|
|
|
TLocalisamfile magcli(LF_CLIFOGIAC);
|
|
|
|
|
magcli.put(CLIFOGIAC_ANNOES, datadoc.year());
|
|
|
|
|
magcli.put(CLIFOGIAC_TIPOCF, 'C');
|
|
|
|
|
magcli.put(CLIFOGIAC_CODCF, codcf);
|
|
|
|
|
magcli.put(CLIFOGIAC_INDSPED, indsped);
|
|
|
|
|
magcli.put(CLIFOGIAC_CODART, msk.get(FR_CODART));
|
|
|
|
|
magcli.put(CLIFOGIAC_NRIGA, 1);
|
|
|
|
|
|
|
|
|
|
//leggo il record corrispondente
|
|
|
|
|
magcli.read();
|
|
|
|
|
long dotin = magcli.get_long(CLIFOGIAC_DOTIN);
|
|
|
|
|
|
|
|
|
|
real ritirato = f.get();
|
2009-03-12 12:10:59 +00:00
|
|
|
|
real dotod = msk.get_real(FR_JOLLY1);
|
|
|
|
|
|
2009-09-18 09:25:21 +00:00
|
|
|
|
if (ritirato > dotod && f.dirty() && dotin > 0)
|
2009-03-12 12:10:59 +00:00
|
|
|
|
warning_box(TR("ATTENZIONE: stai ritirando un quantitativo maggiore della dotazione!"));
|
|
|
|
|
|
2009-09-18 09:25:21 +00:00
|
|
|
|
|
2009-02-11 15:08:28 +00:00
|
|
|
|
TDocumento& doc = dmask.doc();
|
2009-01-23 10:36:46 +00:00
|
|
|
|
TRiga_documento& rdoc = dmask.doc()[sheet->selected()+1];
|
2009-01-24 14:14:13 +00:00
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
rdoc.put(RDOC_QTAGG1,ritirato);
|
2009-02-04 14:12:34 +00:00
|
|
|
|
|
2009-07-29 13:02:48 +00:00
|
|
|
|
if (msk.field(FR_QTA).enabled() && msk.field(FR_QTA).empty() && !msk.field(FR_QTA).focusdirty())
|
2009-01-24 14:14:13 +00:00
|
|
|
|
{
|
|
|
|
|
real consegnato = ritirato;
|
|
|
|
|
arrotonda(msk, consegnato);
|
|
|
|
|
msk.set(FR_QTA, consegnato, 0x3);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//gestione campi dotazione odierna e dotazione temporanea
|
2009-01-23 10:36:46 +00:00
|
|
|
|
TGiac_per_cli& giac = gbapp().giacenza();
|
2009-03-12 12:10:59 +00:00
|
|
|
|
dotod = giac.giac_att(rdoc, true);
|
2009-01-23 10:36:46 +00:00
|
|
|
|
msk.set(FR_JOLLY1, dotod);
|
2009-02-11 16:28:08 +00:00
|
|
|
|
rdoc.put("DOTOD", dotod);
|
2009-02-11 15:08:28 +00:00
|
|
|
|
|
|
|
|
|
//scrivo la dotazione temporanea solo se esistono le date di dotazione temporanea e questa non <20> scaduta
|
2009-03-04 14:35:47 +00:00
|
|
|
|
if (rdoc.get_date("DADATATMP").ok() && rdoc.get_date("ADATATMP").ok() && rdoc.get_date("ADATATMP") >= doc.get_date(DOC_DATADOC))
|
2009-02-11 15:08:28 +00:00
|
|
|
|
{
|
|
|
|
|
real dotmp = giac.giac_att(rdoc, false);
|
|
|
|
|
msk.set(FR_JOLLY2, dotmp);
|
2009-02-11 16:28:08 +00:00
|
|
|
|
rdoc.put("DOTMP", dotmp);
|
2009-03-25 11:09:50 +00:00
|
|
|
|
}
|
2009-01-23 10:36:46 +00:00
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//LV_CONSEGNATO_HANDLER: per adesso <20> solo un segna - posto
|
|
|
|
|
bool TGestione_bolle_msk::lv_consegnato_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
bool ok = true;
|
|
|
|
|
|
|
|
|
|
switch(f.dlg())
|
|
|
|
|
{
|
|
|
|
|
case FR_QTA: ok = qta_handler( f, k ); break;
|
|
|
|
|
default: break;
|
|
|
|
|
}
|
|
|
|
|
|
2009-01-23 16:28:25 +00:00
|
|
|
|
if (f.to_check(k))
|
|
|
|
|
{
|
|
|
|
|
TMask& msk = f.mask();
|
|
|
|
|
real consegnato = f.get();
|
|
|
|
|
//gestione campi dotazione odierna e dotazione temporanea
|
|
|
|
|
TSheet_field* sheet = msk.get_sheet();
|
|
|
|
|
TDocumento_mask& dmask = (TDocumento_mask&)sheet->mask();
|
2009-02-11 15:08:28 +00:00
|
|
|
|
TDocumento& doc = dmask.doc();
|
2009-01-23 16:28:25 +00:00
|
|
|
|
TRiga_documento& rdoc = dmask.doc()[sheet->selected()+1];
|
2009-01-24 14:14:13 +00:00
|
|
|
|
rdoc.put(RDOC_QTA, consegnato);
|
2009-01-23 10:36:46 +00:00
|
|
|
|
|
2009-01-23 16:28:25 +00:00
|
|
|
|
TGiac_per_cli& giac = gbapp().giacenza();
|
2009-01-24 12:09:50 +00:00
|
|
|
|
real dotod = giac.giac_att(rdoc, true);
|
2009-01-23 16:28:25 +00:00
|
|
|
|
msk.set(FR_JOLLY1, dotod);
|
2009-02-11 16:28:08 +00:00
|
|
|
|
rdoc.put("DOTOD", dotod);
|
|
|
|
|
|
2009-02-11 15:08:28 +00:00
|
|
|
|
//scrivo la dotazione temporanea solo se esistono le date di dotazione temporanea e questa non <20> scaduta
|
2009-03-04 14:35:47 +00:00
|
|
|
|
if (rdoc.get_date("DADATATMP").ok() && rdoc.get_date("ADATATMP").ok() && rdoc.get_date("ADATATMP") >= doc.get_date(DOC_DATADOC))
|
2009-02-11 15:08:28 +00:00
|
|
|
|
{
|
|
|
|
|
real dotmp = giac.giac_att(rdoc, false);
|
|
|
|
|
msk.set(FR_JOLLY2, dotmp);
|
2009-02-11 16:28:08 +00:00
|
|
|
|
rdoc.put("DOTMP", dotmp);
|
2009-03-25 11:09:50 +00:00
|
|
|
|
}
|
2009-01-23 10:36:46 +00:00
|
|
|
|
}
|
|
|
|
|
return ok;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//LV_CODART_HANDLER: handler sul campo codice articolo, che carica la causale relativa all'articolo
|
|
|
|
|
//e controlla se l'articolo che si sta inserendo fa parte della dotazione del cliente
|
|
|
|
|
bool TGestione_bolle_msk::lv_codart_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
bool ok = true;
|
|
|
|
|
switch(f.dlg())
|
|
|
|
|
{
|
|
|
|
|
case FR_CODART: ok = codart_handler( f, k ); break;
|
|
|
|
|
default: break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ok && (k == K_ENTER || k == K_TAB))
|
|
|
|
|
{
|
|
|
|
|
TMask& msk = f.mask();
|
|
|
|
|
const TString& codart = msk.get(FR_CODART);
|
|
|
|
|
|
|
|
|
|
if (codart.full())
|
|
|
|
|
{
|
|
|
|
|
TGestione_bolle_msk& dmsk = (TGestione_bolle_msk&) msk.get_sheet()->mask();
|
2009-03-18 15:26:57 +00:00
|
|
|
|
TSheet_field* sheet = msk.get_sheet();
|
|
|
|
|
TRiga_documento& rdoc = dmsk.doc()[sheet->selected()+1];
|
|
|
|
|
|
|
|
|
|
rdoc.put(RDOC_CODART, codart);
|
2009-01-23 10:36:46 +00:00
|
|
|
|
|
|
|
|
|
//recupero dal documento i dati di interesse per recuperare...
|
|
|
|
|
//...i dati dalla riga contratto
|
|
|
|
|
const long codcf = dmsk.get_long(F_CODCF);
|
|
|
|
|
const int indsped = dmsk.get_int(F_CODINDSP);
|
|
|
|
|
TDate datadoc = dmsk.get_date(F_DATADOC);
|
|
|
|
|
if (!datadoc.ok())
|
|
|
|
|
datadoc = TODAY;
|
|
|
|
|
|
2009-09-11 16:33:38 +00:00
|
|
|
|
TLaundry_contract cont(codcf, indsped, datadoc);
|
2009-01-23 10:36:46 +00:00
|
|
|
|
const TRectype& rcont = cont.row(codart);
|
|
|
|
|
|
|
|
|
|
//cerco la causale relativa all'articolo; se non la trovo prendo quella standard
|
|
|
|
|
TString4 causale = rcont.get(LVRCONDV_CAUSLAV);
|
2009-08-21 08:21:37 +00:00
|
|
|
|
if (causale.blank() || atoi(causale) == 0 )
|
|
|
|
|
causale = ini_get_string(CONFIG_DITTA, "lv", "CAUSLAV");
|
2009-03-18 15:26:57 +00:00
|
|
|
|
|
|
|
|
|
if (rdoc.get("DOTOD").empty())
|
|
|
|
|
{
|
|
|
|
|
//gestione campi dotazione odierna e dotazione temporanea
|
|
|
|
|
TGiac_per_cli& giac = gbapp().giacenza();
|
|
|
|
|
giac.preset(dmsk.doc());
|
|
|
|
|
real dotod = giac.giac_att(rdoc, true);
|
|
|
|
|
|
|
|
|
|
rdoc.put("DOTOD", dotod);
|
|
|
|
|
TString16 tmp;
|
|
|
|
|
tmp << dotod;
|
|
|
|
|
msk.field(FR_JOLLY1).set(tmp);
|
2009-01-23 10:36:46 +00:00
|
|
|
|
}
|
2009-02-03 15:47:58 +00:00
|
|
|
|
|
|
|
|
|
if (rdoc.get(RDOC_CODAGG1).empty())
|
|
|
|
|
msk.set(FR_CODAGG1, causale);
|
2009-01-23 10:36:46 +00:00
|
|
|
|
|
2009-06-11 16:20:51 +00:00
|
|
|
|
if (k == K_ENTER && rcont.get_int(LVRCONDV_CALCCONS) == 1)
|
2009-01-28 10:21:50 +00:00
|
|
|
|
{
|
|
|
|
|
TSheet_field* sheet = msk.get_sheet();
|
|
|
|
|
TRiga_documento rdoc = dmsk.doc()[sheet->selected()+1];
|
|
|
|
|
|
|
|
|
|
const real ritor = rdoc.get_real(RDOC_QTAGG4);
|
|
|
|
|
const real conor = rdoc.get_real(RDOC_QTAGG3);
|
|
|
|
|
|
|
|
|
|
const real ritat = msk.get_real(FR_QTAGG1);
|
2009-05-25 09:58:40 +00:00
|
|
|
|
const real conat = msk.get_real(FR_QTA);
|
|
|
|
|
|
|
|
|
|
//instanzio una cache sulle causali
|
|
|
|
|
causale = sheet->cell(sheet->selected(),sheet->cid2index(FR_CODAGG1));
|
|
|
|
|
const TCausale_lavanderie cau(causale);
|
2009-01-28 10:21:50 +00:00
|
|
|
|
|
2009-05-25 09:58:40 +00:00
|
|
|
|
if (cau.movcong() && (ritor != ritat || conor != conat))
|
2009-01-28 10:21:50 +00:00
|
|
|
|
{
|
|
|
|
|
const real congor = rcont.get_real(LVRCONDV_QTACONG);
|
|
|
|
|
|
|
|
|
|
const real congat = conat - ritat + congor;
|
|
|
|
|
|
|
|
|
|
rdoc.put(RDOC_QTAGG5, congat); //conguaglio dopo modifica manuale
|
|
|
|
|
|
|
|
|
|
TLocalisamfile rcondv(LF_LVRCONDV);
|
|
|
|
|
rcondv.put(LVRCONDV_CODCF,codcf);
|
|
|
|
|
rcondv.put(LVRCONDV_CODCONT,cont.get_int(LVCONDV_CODCONT));
|
|
|
|
|
rcondv.put(LVRCONDV_CODART,codart);
|
|
|
|
|
if (rcondv.read() == NOERR)
|
|
|
|
|
{
|
|
|
|
|
rcondv.put(LVRCONDV_QTACONG,congat);
|
|
|
|
|
rcondv.rewrite();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-11 14:30:18 +00:00
|
|
|
|
if (rcont.empty())
|
|
|
|
|
{
|
|
|
|
|
real prezzo;
|
|
|
|
|
//PROPONI PREZZO
|
|
|
|
|
TToken_string key;
|
|
|
|
|
key.add('C');
|
|
|
|
|
key.add(codcf);
|
|
|
|
|
const TRectype& cfven = cache().get(LF_CFVEN, key);
|
|
|
|
|
|
|
|
|
|
bool trvlst = false;
|
|
|
|
|
|
|
|
|
|
if (!cfven.empty())
|
|
|
|
|
{
|
|
|
|
|
//se <20> settata la categoria merceologica, leggo sia il listino che la cat merc, altrimenti solo il listino
|
|
|
|
|
TString8 codlis = cfven.get(CFV_CODLIST);
|
2009-08-21 08:21:37 +00:00
|
|
|
|
TString8 catven;
|
|
|
|
|
if (!ini_get_bool(CONFIG_DITTA, "ve", "GESLISCV"))
|
2009-08-11 14:30:18 +00:00
|
|
|
|
catven = "";
|
|
|
|
|
else
|
|
|
|
|
catven = cfven.get(CFV_CATVEN);
|
|
|
|
|
|
|
|
|
|
//cerco il prezzo sul listino
|
|
|
|
|
key.cut(0);
|
|
|
|
|
key.add('L'); //tipo
|
|
|
|
|
key.add(catven); //catven
|
|
|
|
|
key.add(""); //tipocf
|
|
|
|
|
key.add(""); //codcf
|
|
|
|
|
key.add(codlis); //codlis
|
|
|
|
|
key.add('A'); //tiporiga
|
|
|
|
|
key.add(codart); //codriga
|
|
|
|
|
key.add(""); //um
|
|
|
|
|
key.add(""); //nscagl
|
|
|
|
|
const TRectype& rcondv = cache().get(LF_RCONDV, key);
|
|
|
|
|
|
|
|
|
|
if (!rcondv.empty())
|
|
|
|
|
{
|
|
|
|
|
prezzo = rcondv.get_real(RCONDV_PREZZO);
|
|
|
|
|
trvlst = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//se non ho trovato un listino, o se non c'<27> un listino impostato
|
|
|
|
|
//propongo come prezzo il valore convenzionale
|
|
|
|
|
if (!trvlst)
|
|
|
|
|
{
|
|
|
|
|
key.cut(0);
|
|
|
|
|
key.add(codart);
|
|
|
|
|
key.add(1);
|
|
|
|
|
const TRectype& umart = cache().get(LF_UMART, key);
|
|
|
|
|
prezzo = umart.get_real(UMART_PREZZO);
|
|
|
|
|
if (umart.get(UMART_PREZZO).full())
|
|
|
|
|
trvlst = true;
|
|
|
|
|
}
|
|
|
|
|
rdoc.put(RDOC_PREZZO, prezzo);
|
|
|
|
|
}
|
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
//controllo se si vuole aggiungere un eventuale nuovo articolo al contratto
|
2009-07-25 09:37:46 +00:00
|
|
|
|
if (cont.get_int(LVCONDV_CODCONT) <= 0)
|
2009-09-11 16:33:38 +00:00
|
|
|
|
warning_box(TR("ATTENZIONE: stai generando una bolla per un cliente che non ha nessun contratto in essere"));
|
2009-07-25 09:37:46 +00:00
|
|
|
|
else if (k == K_ENTER && f.dirty() && msk.get(FR_CODARTMAG).full() && rcont.empty() &&
|
|
|
|
|
yesno_box(TR("L'articolo in esame non fa parte della dotazione standard di questo cliente."
|
|
|
|
|
"Si desidera aggiungerla ai contratti?")))
|
2009-09-11 16:33:38 +00:00
|
|
|
|
{
|
|
|
|
|
cont.add_row(codart);
|
|
|
|
|
|
|
|
|
|
//questo pezzo sostituisce il metodo edit
|
|
|
|
|
TFilename ininame; ininame.temp();
|
|
|
|
|
{
|
|
|
|
|
TConfig ini(ininame, "Transaction");
|
|
|
|
|
ini.set("Action", "LINK");
|
|
|
|
|
TString16 p; p << "168";
|
|
|
|
|
ini.set_paragraph(p);
|
|
|
|
|
|
|
|
|
|
ini.set(LVCONDV_CODCF, codcf);
|
|
|
|
|
ini.set(LVCONDV_CODCONT, cont.get_int(LVCONDV_CODCONT));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TString app = "lv0 -3";
|
|
|
|
|
app << " -i" << ininame;
|
|
|
|
|
app << " -c" << codart;
|
|
|
|
|
|
|
|
|
|
TExternal_app a(app);
|
|
|
|
|
ok = a.run() == 0;
|
|
|
|
|
}
|
2009-01-23 10:36:46 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return ok;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//LV_CAUSALE_HANDLER: handler che abilita e/o disabilita i campi di consegnato e ritirato in base alla causale
|
|
|
|
|
//e tenendo conto se l'articolo <20> bloccato o meno
|
|
|
|
|
bool TGestione_bolle_msk::lv_causale_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
if (f.to_check(k, true))
|
2009-08-21 08:21:37 +00:00
|
|
|
|
{
|
|
|
|
|
TString4 codmagdef = ini_get_string(CONFIG_DITTA, "lv", "CODMAG"); //magazzino
|
|
|
|
|
TString4 coddepdef = ini_get_string(CONFIG_DITTA, "lv", "CODMAGC"); //magazzino del circolante (deposito)
|
2009-02-23 11:51:11 +00:00
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
//leggo la causale che ho scritto nella riga corrente dello sheet
|
|
|
|
|
TString4 causale = f.get();
|
|
|
|
|
|
|
|
|
|
if (causale.full())
|
|
|
|
|
{
|
|
|
|
|
TMask& msk = f.mask();
|
|
|
|
|
|
|
|
|
|
//leggo il codart che ho scritto nella riga corrente delle sheet
|
|
|
|
|
const TString& codart = msk.get(FR_CODART);
|
2009-02-03 15:47:58 +00:00
|
|
|
|
|
|
|
|
|
//srcrivo nel documento la causale
|
2009-03-04 15:17:58 +00:00
|
|
|
|
TGestione_bolle_msk& dmsk = (TGestione_bolle_msk&) msk.get_sheet()->mask();
|
|
|
|
|
TSheet_field& sheet = dmsk.sfield(F_SHEET);
|
|
|
|
|
|
|
|
|
|
//esplodo la descrizione della causale
|
|
|
|
|
dettaglio_causale(sheet);
|
2009-02-03 15:47:58 +00:00
|
|
|
|
|
2009-02-23 11:51:11 +00:00
|
|
|
|
TDocumento& doc = dmsk.doc();
|
2009-03-04 15:17:58 +00:00
|
|
|
|
TRiga_documento& rdoc = doc[msk.get_sheet()->selected()+1];
|
2009-02-23 11:51:11 +00:00
|
|
|
|
TString4 codmag(doc.clifor().vendite().get(CFV_CODMAG));
|
|
|
|
|
TString4 coddep(doc.clifor().vendite().get(CFV_CODDEP));
|
|
|
|
|
TString4 codmagcoll(codmag);
|
|
|
|
|
TString4 coddepcoll(coddep);
|
|
|
|
|
|
|
|
|
|
rdoc.put(RDOC_CODAGG1, causale);
|
2009-02-03 15:47:58 +00:00
|
|
|
|
|
2009-02-23 11:51:11 +00:00
|
|
|
|
//recupero i dati di interesse dalla testata per poter trovare il contratto
|
2009-01-23 10:36:46 +00:00
|
|
|
|
const long codcf = dmsk.get_long(F_CODCF);
|
|
|
|
|
const int indsped = dmsk.get_int(F_CODINDSP);
|
|
|
|
|
TDate datadoc = dmsk.get_date(F_DATADOC);
|
|
|
|
|
if (!datadoc.ok())
|
|
|
|
|
datadoc = TODAY;
|
|
|
|
|
|
|
|
|
|
//trovo il contratto utlizzato e la riga contratto specifica che mi serve
|
|
|
|
|
const TLaundry_contract cont(codcf, indsped, datadoc);
|
|
|
|
|
const TRectype& rcont = cont.row(codart);
|
2009-02-10 17:29:09 +00:00
|
|
|
|
|
2009-05-25 09:58:40 +00:00
|
|
|
|
TCausale_lavanderie cau(causale);
|
2009-02-10 17:29:09 +00:00
|
|
|
|
//movimento o meno la dotazione temporanea/odierna a seconda di cosa prevede la causale
|
|
|
|
|
int sgn_rit = 0;
|
|
|
|
|
int sgn_con = 0;
|
2009-05-25 09:58:40 +00:00
|
|
|
|
if (cau.is_ritiro())
|
2009-02-10 17:29:09 +00:00
|
|
|
|
{
|
2009-05-25 09:58:40 +00:00
|
|
|
|
const TCausale_magazzino& rit = cau.causale_ritiro();
|
2009-02-23 11:51:11 +00:00
|
|
|
|
if (codmagcoll.blank() && rit.has_default_mag())
|
|
|
|
|
{
|
|
|
|
|
codmagcoll = rit.default_mag();
|
|
|
|
|
coddepcoll = rit.default_dep();
|
|
|
|
|
}
|
2009-02-10 17:29:09 +00:00
|
|
|
|
sgn_rit = rit.sgn(s_dottm);
|
|
|
|
|
}
|
2009-05-25 09:58:40 +00:00
|
|
|
|
if (cau.is_consegna())
|
2009-02-10 17:29:09 +00:00
|
|
|
|
{
|
2009-05-25 09:58:40 +00:00
|
|
|
|
const TCausale_magazzino& con = cau.causale_consegna();
|
2009-02-23 11:51:11 +00:00
|
|
|
|
if (codmag.blank() && con.has_default_mag())
|
|
|
|
|
{
|
|
|
|
|
codmag = con.default_mag();
|
|
|
|
|
coddep = con.default_dep();
|
|
|
|
|
}
|
2009-02-10 17:29:09 +00:00
|
|
|
|
sgn_con = con.sgn(s_dottm);
|
2009-03-25 11:09:50 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//setto il valore della dotazione temporanea
|
|
|
|
|
TGiac_per_cli& giac = gbapp().giacenza();
|
|
|
|
|
giac.preset(doc);
|
|
|
|
|
real dotmp = giac.giac_att(rdoc, false);
|
|
|
|
|
rdoc.put("DOTMP", dotmp);
|
|
|
|
|
TString16 tmp;
|
|
|
|
|
tmp << dotmp;
|
|
|
|
|
msk.field(FR_JOLLY2).set(tmp);
|
|
|
|
|
//setto le date di inizio e fine della dotazione temporanea
|
|
|
|
|
TDate dadata = rcont.get_date(LVRCONDV_INDTTMP);
|
|
|
|
|
TDate adata = rcont.get_date(LVRCONDV_FIDTTMP);
|
|
|
|
|
|
2009-04-24 13:55:05 +00:00
|
|
|
|
bool fdotmp = false;
|
2009-03-25 11:09:50 +00:00
|
|
|
|
|
2009-04-24 13:55:05 +00:00
|
|
|
|
//disabilito i campi di dotazione temporanea se la causale non prevede la loro movimentazione
|
2009-03-25 11:09:50 +00:00
|
|
|
|
if (sgn_rit == 0 && sgn_con == 0)
|
|
|
|
|
{
|
|
|
|
|
msk.field(FR_JOLLY3).disable();
|
|
|
|
|
msk.field(FR_JOLLY4).disable();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2009-06-23 09:48:07 +00:00
|
|
|
|
msk.field(FR_JOLLY3).enable();
|
|
|
|
|
msk.field(FR_JOLLY4).enable();
|
2009-04-24 13:55:05 +00:00
|
|
|
|
fdotmp = true;
|
2009-02-10 17:29:09 +00:00
|
|
|
|
}
|
2009-04-24 13:55:05 +00:00
|
|
|
|
|
|
|
|
|
if (dadata.ok() || fdotmp)
|
|
|
|
|
{
|
|
|
|
|
TLocalisamfile rcondv(LF_LVRCONDV);
|
|
|
|
|
rcondv.put(LVRCONDV_CODCF,codcf);
|
|
|
|
|
rcondv.put(LVRCONDV_CODCONT,cont.get_int(LVCONDV_CODCONT));
|
|
|
|
|
rcondv.put(LVRCONDV_CODART,msk.get(FR_CODART));
|
|
|
|
|
|
|
|
|
|
if (rdoc.get_date("DADATATMP").empty())
|
|
|
|
|
{
|
|
|
|
|
if (!dadata.ok() && rcondv.read() == NOERR)
|
|
|
|
|
{
|
|
|
|
|
rcondv.put(LVRCONDV_INDTTMP, datadoc);
|
2009-06-23 09:48:07 +00:00
|
|
|
|
rcondv.rewrite();
|
|
|
|
|
rdoc.put("DADATATMP", datadoc);
|
|
|
|
|
msk.field(FR_JOLLY3).set(datadoc);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
rdoc.put("DADATATMP", dadata);
|
|
|
|
|
msk.field(FR_JOLLY3).set(dadata);
|
2009-04-24 13:55:05 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (rdoc.get_date("ADATATMP").empty())
|
|
|
|
|
{
|
|
|
|
|
if (adata.ok() && adata <= datadoc)
|
|
|
|
|
{
|
|
|
|
|
rdoc.put("ADATATMP", adata);
|
|
|
|
|
msk.field(FR_JOLLY4).set(adata);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//instanzio in TRecordset sui giri
|
|
|
|
|
TISAM_recordset giri("USE LVRCONSPLAN KEY 3\nSELECT DTCONS>#DATADOC\nFROM CODCF=#CODCF CODCONT=#CODCONT\nTO CODCF=#CODCF CODCONT=#CODCONT");
|
|
|
|
|
giri.set_var("#DATADOC", datadoc);
|
|
|
|
|
giri.set_var("#CODCF", codcf);
|
|
|
|
|
giri.set_var("#CODCONT", cont.get_long(LVCONDV_CODCONT));
|
|
|
|
|
if (giri.move_first())
|
|
|
|
|
{
|
|
|
|
|
rdoc.put("ADATATMP", giri.get(LVRCONSPLAN_DTCONS).as_date());
|
|
|
|
|
msk.field(FR_JOLLY4).set(giri.get(LVRCONSPLAN_DTCONS).as_date());
|
|
|
|
|
|
|
|
|
|
if (rcondv.read() == NOERR)
|
|
|
|
|
{
|
|
|
|
|
rcondv.put(LVRCONDV_FIDTTMP, giri.get(LVRCONSPLAN_DTCONS).as_date());
|
|
|
|
|
rcondv.rewrite();
|
|
|
|
|
}
|
2009-05-25 09:58:40 +00:00
|
|
|
|
}
|
2009-04-24 13:55:05 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
//abilito o disabilito azzerandolo il campo "Ritirato" a seconda di cosa prevede la causale
|
2009-05-25 09:58:40 +00:00
|
|
|
|
if (cau.is_ritiro())
|
2009-02-23 11:51:11 +00:00
|
|
|
|
{
|
2009-01-23 10:36:46 +00:00
|
|
|
|
msk.field(FR_QTAGG1).enable(true);
|
2009-03-02 16:08:37 +00:00
|
|
|
|
|
|
|
|
|
if (codmagcoll.blank())
|
2009-06-04 14:55:33 +00:00
|
|
|
|
{
|
2009-03-02 16:08:37 +00:00
|
|
|
|
codmagcoll = codmagdef;
|
2009-06-04 14:55:33 +00:00
|
|
|
|
msk.field(FR_CODMAGC).set(codmagcoll);
|
|
|
|
|
}
|
2009-03-02 16:08:37 +00:00
|
|
|
|
|
|
|
|
|
if (coddepcoll.blank())
|
2009-06-04 14:55:33 +00:00
|
|
|
|
{
|
2009-03-02 16:08:37 +00:00
|
|
|
|
coddepcoll = coddepdef; //magazzino del circolante
|
2009-06-04 14:55:33 +00:00
|
|
|
|
msk.field(FR_CODDEPC).set(coddepcoll);
|
|
|
|
|
}
|
2009-02-23 11:51:11 +00:00
|
|
|
|
}
|
2009-01-23 10:36:46 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
2009-02-23 11:51:11 +00:00
|
|
|
|
msk.field(FR_QTAGG1).set("");
|
2009-01-23 10:36:46 +00:00
|
|
|
|
msk.field(FR_QTAGG1).disable();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//abilito o disabilito azzerandolo il campo "Consegnato" a seconda di cosa prevede la causale
|
|
|
|
|
//ATTENZIONE: questo campo risulta sempre disabilitato se l'articolo <20> bloccato
|
2009-05-25 09:58:40 +00:00
|
|
|
|
if (cau.is_consegna() && rcont.get(LVRCONDV_ARTBLOC).empty())
|
2009-02-23 11:51:11 +00:00
|
|
|
|
{
|
2009-01-23 10:36:46 +00:00
|
|
|
|
msk.field(FR_QTA).enable(true);
|
2009-02-23 11:51:11 +00:00
|
|
|
|
if (codmag.blank())
|
2009-06-04 14:55:33 +00:00
|
|
|
|
{
|
2009-03-02 16:08:37 +00:00
|
|
|
|
codmag = codmagdef;
|
2009-06-04 14:55:33 +00:00
|
|
|
|
msk.field(FR_CODMAG).set(codmag);
|
|
|
|
|
}
|
2009-03-02 16:08:37 +00:00
|
|
|
|
|
|
|
|
|
if (coddep.blank())
|
2009-06-04 14:55:33 +00:00
|
|
|
|
{
|
2009-02-23 11:51:11 +00:00
|
|
|
|
coddep = coddepdef;
|
2009-06-04 14:55:33 +00:00
|
|
|
|
msk.field(FR_CODDEP).set(coddep);
|
|
|
|
|
}
|
2009-02-23 11:51:11 +00:00
|
|
|
|
}
|
2009-01-23 10:36:46 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
2009-02-23 11:51:11 +00:00
|
|
|
|
msk.field(FR_QTA).set("");
|
2009-01-23 10:36:46 +00:00
|
|
|
|
msk.field(FR_QTA).disable();
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-03-06 14:40:52 +00:00
|
|
|
|
}
|
2009-01-23 10:36:46 +00:00
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2009-03-04 14:35:47 +00:00
|
|
|
|
//LV_CODMAG_HANDLER: handler che limita l'esecuzione
|
2009-03-02 16:08:37 +00:00
|
|
|
|
bool TGestione_bolle_msk::lv_codmag_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
bool ok = true;
|
2009-06-04 14:55:33 +00:00
|
|
|
|
if (f.to_check(k, true))
|
2009-03-02 16:08:37 +00:00
|
|
|
|
{
|
|
|
|
|
TMask& msk = f.mask();
|
|
|
|
|
const TString& causale = msk.get(FR_CAULAV);
|
|
|
|
|
|
|
|
|
|
if (causale.full())
|
|
|
|
|
{
|
|
|
|
|
switch(f.dlg())
|
|
|
|
|
{
|
|
|
|
|
case FR_CODMAG: ok = codmag_handler( f, k ); break;
|
|
|
|
|
default: break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return ok;
|
|
|
|
|
}
|
|
|
|
|
|
2009-03-06 14:40:52 +00:00
|
|
|
|
bool TGestione_bolle_msk::lv_datatmp_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
if (k == K_ENTER)
|
|
|
|
|
{
|
|
|
|
|
TMask& msk = f.mask();
|
|
|
|
|
|
|
|
|
|
//leggo il codart che ho scritto nella riga corrente dello sheet
|
|
|
|
|
const TString& codart = msk.get(FR_CODART);
|
|
|
|
|
const TDate& dadata = msk.get_date(FR_JOLLY3);
|
|
|
|
|
const TDate& adata = msk.get_date(FR_JOLLY4);
|
|
|
|
|
|
|
|
|
|
TGestione_bolle_msk& dmsk = (TGestione_bolle_msk&) msk.get_sheet()->mask();
|
|
|
|
|
|
|
|
|
|
//recupero il documento e modifico le date sulla riga documento
|
|
|
|
|
TDocumento& doc = dmsk.doc();
|
|
|
|
|
TRiga_documento& rdoc = doc[msk.get_sheet()->selected()+1];
|
|
|
|
|
rdoc.put("DADATATMP", dadata);
|
|
|
|
|
rdoc.put("ADATATMP", adata);
|
|
|
|
|
|
|
|
|
|
//recupero i dati di interesse dalla testata per poter trovare il contratto
|
|
|
|
|
const long codcf = dmsk.get_long(F_CODCF);
|
|
|
|
|
const int indsped = dmsk.get_int(F_CODINDSP);
|
|
|
|
|
TDate datadoc = dmsk.get_date(F_DATADOC);
|
|
|
|
|
//trovo il contratto utlizzato e la riga contratto specifica che mi serve
|
|
|
|
|
const TLaundry_contract cont(codcf, indsped, datadoc);
|
|
|
|
|
|
|
|
|
|
TLocalisamfile rcondv(LF_LVRCONDV);
|
|
|
|
|
rcondv.put(LVRCONDV_CODCF,codcf);
|
|
|
|
|
rcondv.put(LVRCONDV_CODCONT,cont.get_int(LVCONDV_CODCONT));
|
|
|
|
|
rcondv.put(LVRCONDV_CODART,msk.get(FR_CODART));
|
|
|
|
|
if (rcondv.read() == NOERR)
|
|
|
|
|
{
|
|
|
|
|
rcondv.put(LVRCONDV_INDTTMP, dadata);
|
|
|
|
|
rcondv.put(LVRCONDV_FIDTTMP, adata);
|
|
|
|
|
rcondv.rewrite();
|
|
|
|
|
}
|
|
|
|
|
msk.field(FR_JOLLY3).set_focusdirty(false);
|
|
|
|
|
msk.field(FR_JOLLY4).set_focusdirty(false);
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
//metodo che setta gli handler sui campi di riga
|
2008-12-04 10:18:45 +00:00
|
|
|
|
void TGestione_bolle_msk::user_set_row_handler(TMask& rm, short field, int index)
|
2008-12-03 12:15:09 +00:00
|
|
|
|
{
|
|
|
|
|
switch(index)
|
|
|
|
|
{
|
2009-06-04 14:55:33 +00:00
|
|
|
|
case 4101: rm.set_handler(field, lv_ritirato_handler); break;
|
|
|
|
|
case 4102: rm.set_handler(field, lv_consegnato_handler); break;
|
|
|
|
|
case 4103: rm.set_handler(field, lv_codart_handler); break;
|
|
|
|
|
case 4104: rm.set_handler(field, lv_causale_handler); break;
|
|
|
|
|
case 4105: rm.set_handler(field, lv_codmag_handler); break;
|
|
|
|
|
case 4106: rm.set_handler(field, lv_datatmp_handler); break;
|
2008-12-03 12:15:09 +00:00
|
|
|
|
default : TDocumento_mask::user_set_row_handler(rm, field, index); break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
//metodo che setta l'handler di bolla
|
2008-12-04 10:18:45 +00:00
|
|
|
|
void TGestione_bolle_msk::user_set_handler( short fieldid, int index)
|
2008-12-01 14:41:05 +00:00
|
|
|
|
{
|
2008-12-04 10:18:45 +00:00
|
|
|
|
switch(index)
|
|
|
|
|
{
|
2009-03-18 15:26:57 +00:00
|
|
|
|
case 4101: set_field_handler(fieldid, lv_data_handler); break;
|
|
|
|
|
case 4102: set_field_handler(fieldid, lv_contratto_handler); break;
|
|
|
|
|
case 4103: set_field_handler(fieldid, lv_bolla_handler); break;
|
2009-08-06 15:32:02 +00:00
|
|
|
|
case 4105: set_field_handler(fieldid, lv_dataprco_handler); break;
|
2008-12-04 10:18:45 +00:00
|
|
|
|
default : TDocumento_mask::user_set_handler(fieldid, index); break;
|
|
|
|
|
}
|
2008-12-01 14:41:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
2009-01-27 10:19:18 +00:00
|
|
|
|
TGestione_bolle_msk::TGestione_bolle_msk(const char* tipodoc) : TDocumento_mask(tipodoc), _autoselect(-1)
|
2009-08-21 08:21:37 +00:00
|
|
|
|
{
|
|
|
|
|
if (ini_get_bool(CONFIG_DITTA, "lv", "Datafissa"))
|
2009-01-27 15:29:42 +00:00
|
|
|
|
field(F_DATADOC).disable();
|
2009-01-27 10:19:18 +00:00
|
|
|
|
sfield(F_SHEET).set_nav_column(FR_QTA, FR_QTAGG1);
|
2009-01-29 11:41:10 +00:00
|
|
|
|
sfield(F_SHEET).set_auto_append();
|
2009-06-04 10:20:33 +00:00
|
|
|
|
sfield(F_SHEET).set_handler( ss_handler );
|
2009-01-29 11:41:10 +00:00
|
|
|
|
sfield(F_SHEET).set_notify( ss_notify );
|
2008-12-18 15:05:34 +00:00
|
|
|
|
}
|
2008-12-01 14:41:05 +00:00
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
//////////////////////////////////////////
|
|
|
|
|
//// CLASSE TGESTIONE_BOLLE_APP ////
|
|
|
|
|
//////////////////////////////////////////
|
2008-12-01 14:41:05 +00:00
|
|
|
|
|
2008-12-15 10:43:35 +00:00
|
|
|
|
//ridefinisco il metodo get_mask delle TMotore_application
|
2008-12-01 14:41:05 +00:00
|
|
|
|
TMask* TGestione_bolle_app::get_mask( int mode )
|
|
|
|
|
{
|
|
|
|
|
if (mode == MODE_INS || mode == MODE_MOD)
|
|
|
|
|
{
|
|
|
|
|
TString4 tipodoc;
|
|
|
|
|
if (mode == MODE_MOD)
|
|
|
|
|
tipodoc = get_relation()->curr().get(DOC_TIPODOC); // Lo prendo dalla relazione (Gelai)
|
|
|
|
|
else
|
|
|
|
|
tipodoc = TMotore_application::get_mask(MODE_QUERY)->get(F_TIPODOC);
|
2009-06-16 16:10:30 +00:00
|
|
|
|
|
2009-07-27 16:56:26 +00:00
|
|
|
|
if (_doc_masks.objptr(tipodoc) == NULL)
|
2008-12-01 14:41:05 +00:00
|
|
|
|
{
|
2009-07-27 16:56:26 +00:00
|
|
|
|
TGestione_bolle_msk* m = new TGestione_bolle_msk(tipodoc);
|
2009-06-16 16:10:30 +00:00
|
|
|
|
|
|
|
|
|
TSheet_field& sheet = m->sfield(F_SHEET);
|
|
|
|
|
if (sheet.exist_column(FR_JOLLY1))
|
|
|
|
|
{
|
|
|
|
|
//setto l'allineamento a destra dei campi incriminati e pure criminali
|
|
|
|
|
sheet.set_column_justify(sheet.cid2index(FR_JOLLY1), true);
|
|
|
|
|
sheet.set_column_justify(sheet.cid2index(FR_JOLLY2), true);
|
|
|
|
|
}
|
|
|
|
|
|
2008-12-01 14:41:05 +00:00
|
|
|
|
_doc_masks.add(tipodoc, m);
|
|
|
|
|
const TTipo_documento& tdoc = m->doc().tipo();
|
|
|
|
|
const TString_array& handlers = tdoc.handlers();
|
|
|
|
|
FOR_EACH_ARRAY_ROW(handlers, i, row)
|
|
|
|
|
{
|
|
|
|
|
m->user_set_handler( row->get_int( 0 ), row->get_int( 1 ) );
|
|
|
|
|
}
|
|
|
|
|
}
|
2008-12-15 10:43:35 +00:00
|
|
|
|
}
|
2008-12-01 14:41:05 +00:00
|
|
|
|
return TMotore_application::get_mask(mode);
|
|
|
|
|
}
|
|
|
|
|
|
2009-02-03 15:47:58 +00:00
|
|
|
|
void TGestione_bolle_app::elimina_vuote( const TMask& m)
|
|
|
|
|
{
|
2008-12-15 10:43:35 +00:00
|
|
|
|
TDocumento_mask& mask = (TDocumento_mask&) m;
|
|
|
|
|
TDocumento& d = mask.doc();
|
2009-02-03 15:47:58 +00:00
|
|
|
|
|
|
|
|
|
TSheet_field& sheet = mask.sfield(F_SHEET);
|
2008-12-15 10:43:35 +00:00
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
FOR_EACH_DOC_ROW_BACK(d, r, row)
|
2008-12-15 10:43:35 +00:00
|
|
|
|
{
|
2009-02-03 15:47:58 +00:00
|
|
|
|
if (row->is_articolo() && row->get_int(RDOC_QTA) == 0 && row->get_int(RDOC_QTAGG1) == 0)
|
|
|
|
|
{
|
2008-12-15 10:43:35 +00:00
|
|
|
|
d.destroy_row(r,true);
|
2009-02-03 15:47:58 +00:00
|
|
|
|
}
|
2008-12-15 10:43:35 +00:00
|
|
|
|
}
|
2009-02-03 15:47:58 +00:00
|
|
|
|
}
|
2008-12-15 10:43:35 +00:00
|
|
|
|
|
2009-02-03 15:47:58 +00:00
|
|
|
|
//ridefinisco il metodo write delle TMotore_application
|
|
|
|
|
int TGestione_bolle_app::write( const TMask& m )
|
2009-02-16 10:00:06 +00:00
|
|
|
|
{
|
2009-02-03 15:47:58 +00:00
|
|
|
|
elimina_vuote(m);
|
2009-02-16 10:00:06 +00:00
|
|
|
|
|
2009-06-04 14:55:33 +00:00
|
|
|
|
return TMotore_application::write(m);
|
2008-12-15 10:43:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//ridefinisco il metodo rewrite delle TMotore_application
|
|
|
|
|
int TGestione_bolle_app::rewrite( const TMask& m )
|
|
|
|
|
{
|
2009-02-03 15:47:58 +00:00
|
|
|
|
elimina_vuote(m);
|
2009-02-16 10:00:06 +00:00
|
|
|
|
|
2009-06-04 14:55:33 +00:00
|
|
|
|
return TMotore_application::rewrite(m);
|
2008-12-15 10:43:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
//ridefinisco il metodo read della TMotore_application
|
|
|
|
|
int TGestione_bolle_app::read(TMask& m)
|
|
|
|
|
{
|
|
|
|
|
const int err = TMotore_application::read(m);
|
|
|
|
|
|
2009-01-29 09:21:11 +00:00
|
|
|
|
TGestione_bolle_msk& mask = (TGestione_bolle_msk&) m;
|
2009-01-23 10:36:46 +00:00
|
|
|
|
TDocumento& d = mask.doc();
|
|
|
|
|
|
|
|
|
|
_giac.reset(d);
|
|
|
|
|
FOR_EACH_DOC_ROW_BACK(d, r, row)
|
|
|
|
|
_giac.load_row((TRiga_documento&)*row);
|
|
|
|
|
|
2009-01-29 09:21:11 +00:00
|
|
|
|
if (err == NOERR)
|
|
|
|
|
mask._autoselect = 0;
|
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
return err;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//ridefinisco il metodo init_insert_mode della TMotore_application
|
|
|
|
|
void TGestione_bolle_app::init_insert_mode(TMask &m)
|
|
|
|
|
{
|
2009-01-23 17:12:52 +00:00
|
|
|
|
TGestione_bolle_msk& mask = (TGestione_bolle_msk&) m;
|
2009-01-23 10:36:46 +00:00
|
|
|
|
TDocumento& d = mask.doc();
|
|
|
|
|
_giac.reset(d);
|
|
|
|
|
|
2009-08-06 15:32:02 +00:00
|
|
|
|
//se sto leggendo o generando un buono di ritiro, abilito questo campo
|
|
|
|
|
bool enable_dataprco = mask.get(F_CODNUM) == ini_get_string(CONFIG_DITTA, "lv", "NUM_RIT(0)") &&
|
|
|
|
|
mask.get(F_TIPODOC) == ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_RIT(0)");
|
|
|
|
|
|
|
|
|
|
mask.field(F_LVDATAPRCO).enable(enable_dataprco);
|
|
|
|
|
|
2009-01-23 17:12:52 +00:00
|
|
|
|
mask.reset_var_mask();
|
2009-03-02 16:08:37 +00:00
|
|
|
|
mask.first_focus(F_CODCF, false);
|
2009-01-23 17:12:52 +00:00
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
return TMotore_application::init_insert_mode(m);
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-21 08:21:37 +00:00
|
|
|
|
//ridefinisco il metodo init_query_mode della TMotore_application
|
|
|
|
|
void TGestione_bolle_app::init_modify_mode(TMask &m)
|
|
|
|
|
{
|
|
|
|
|
TGestione_bolle_msk& mask = (TGestione_bolle_msk&) m;
|
|
|
|
|
|
|
|
|
|
//se sto leggendo o generando un buono di ritiro, abilito questo campo
|
|
|
|
|
bool enable_dataprco = mask.get(F_CODNUM) == ini_get_string(CONFIG_DITTA, "lv", "NUM_RIT(0)") &&
|
|
|
|
|
mask.get(F_TIPODOC) == ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_RIT(0)");
|
|
|
|
|
|
|
|
|
|
mask.field(F_LVDATAPRCO).enable(enable_dataprco);
|
|
|
|
|
|
|
|
|
|
mask.first_focus(F_CODCF, false);
|
|
|
|
|
|
|
|
|
|
return TMotore_application::init_modify_mode(m);
|
|
|
|
|
}
|
|
|
|
|
|
2009-01-23 10:36:46 +00:00
|
|
|
|
//metodo che mi restituisce la giac
|
|
|
|
|
TGiac_per_cli& TGestione_bolle_app::giacenza()
|
|
|
|
|
{
|
|
|
|
|
return _giac;
|
|
|
|
|
}
|
|
|
|
|
|
2008-12-01 14:41:05 +00:00
|
|
|
|
int lv3100( int argc, char* argv[])
|
|
|
|
|
{
|
|
|
|
|
TGestione_bolle_app a;
|
|
|
|
|
|
|
|
|
|
a.run( argc, argv, TR("Documenti di Trasporto"));
|
|
|
|
|
return 0;
|
|
|
|
|
}
|