campo-sirio/lv/lv0100.cpp

155 lines
4.4 KiB
C++
Raw Normal View History

// gestione tabelle lavanderie
#include <automask.h>
#include <modtbapp.h>
#include <tabutil.h>
#include "lvtbcau.h"
///////////////////////////////////////////////////////////
// Maschera generica di gestione tabelle lavanderie
///////////////////////////////////////////////////////////
class TLV_table_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field &o, TField_event e, long jolly);
public:
TLV_table_mask(const char* name) : TAutomask(name) {}
};
bool TLV_table_mask::on_field_event(TOperable_field &o, TField_event e, long jolly)
{
return true;
}
///////////////////////////////////////////////////////////
// Applicazione generica di gestione tabelle lavanderie
///////////////////////////////////////////////////////////
// applicazione per la gestione delle tabelle di lavanderia
class TLV_table_app : public TTable_module_application
{
protected: // TRelation_application
virtual TMask* user_create_mask();
virtual int write(const TMask& m);
virtual int rewrite(const TMask& m);
virtual bool get_next_key(TToken_string& key);
void cambia_segni(const TMask& m, const bool ritirato);
public:
};
// Ridefinire questo metodo per le eventuali maschere speciali
// che abbiano controlli speciali da effettuare nella on_field_evebt
TMask* TLV_table_app::user_create_mask()
{
const TString4 name = get_relation()->file(0).name();
if (name == "???")
return new TLV_table_mask("???");
// Le maschere normali sono gia' gestite dalla TTable_module_application
return TTable_module_application::user_create_mask();
}
void TLV_table_app::cambia_segni(const TMask& m, const bool ritirato)
{
//instanzio una TTable sulla ytabella delle causali di magazzino
TTable cau("%CAU");
const TString16 causale = m.get(ritirato ? F_CAUSALE_RITIRO : F_CAUSALE_CONSEGNA);
cau.put("CODTAB", causale);
//se trovo la causale
if (cau.read(_isequal, _lock) == NOERR)
{
TString s2 = cau.get("S2");
TString16 sgn = "";
int min = ritirato ? F_SGNDOTIN_R : F_SGNDOTIN_C;
int max = ritirato ? F_SGNCONMN_R : F_SGNCONMN_C;
//mi costruisco la stringa dei segni delle movimentazioni riportata in maschera
for (short i = min; i <= max; i++)
{
TString4 tmp;
switch (m.get_int(i))
{
case 0: tmp << "0 "; break;
case 1: tmp << "+1"; break;
case -1: tmp << "-1"; break;
default: break;
}
sgn << tmp;
}
//estraggo la sottostringa che mi interessa dalla tabella delle causali e la porto a lunghezza 10
TString16 str = s2.mid(28,10);
if(str.len() < 10)
str << " ";
//chiedo se volglio proprio modificare i segni della movimentazione di magazzino
if (str != sgn && yesno_box(TR("Si desidera veramente modificare i segni delle causali?")))
{
s2.overwrite(sgn,28,10);
cau.put("S2", s2);
cau.rewrite();
}
}
else
cau.unlock();
}
// Ridefinizione del metodo write
int TLV_table_app::write(const TMask& m)
{
const TString4 name = get_relation()->file(0).name();
if (name == "CAU")
{
if(m.get_bool(F_RITIRATO))
cambia_segni(m, true);
if(m.get_bool(F_CONSEGNATO))
cambia_segni(m, false);
}
return TTable_module_application::write(m);
}
// Ridefinizione del metodo rewrite
int TLV_table_app::rewrite(const TMask& m)
{
const TString4 name = get_relation()->file(0).name();
if (name == "CAU")
{
if(m.get_bool(F_RITIRATO))
cambia_segni(m, true);
if(m.get_bool(F_CONSEGNATO))
cambia_segni(m, false);
}
return TTable_module_application::rewrite(m);
}
// Cerca di generare automaticamente la prossima chiave numerica di una tabella
bool TLV_table_app::get_next_key(TToken_string& key)
{
// Controlla se il campo COTDAB e' numerico
TMask& msk = curr_mask();
TMask_field* keyfield = msk.find_by_fieldname("CODTAB");
if (keyfield != NULL && keyfield->is_kind_of(CLASS_REAL_FIELD))
{
long num = 1;
TLocalisamfile& tab = get_relation()->lfile();
if (tab.last() == NOERR) // Cerca l'eventuale ultimo record della tabella
num += tab.get_long("CODTAB");
// Costrusci la chiave formattata alla giusta lunghezza del campo, es: "101|0003"
key.format("%d|%0*ld", keyfield->dlg(), keyfield->size(), num);
}
return key.full(); // Ritorna true se la procedura e' riuscita
}
int lv0100(int argc, char* argv[])
{
TLV_table_app a;
a.run(argc, argv, TR("Tabella Lavanderie"));
return 0;
}