campo-sirio/ve/ve0600.cpp
guy 9da797d43f Patch level : 10.0
Files correlati     : ve0.exe ve0100n.msk vetbnar.msk
Ricompilazione Demo : [ ]
Commento            :
Aggiunto supporto per note articolo


git-svn-id: svn://10.65.10.50/branches/R_10_00@21650 c028cbd2-c16b-5b4b-a496-9718f37d4682
2011-02-16 09:42:19 +00:00

254 lines
5.5 KiB
C++
Executable File

#include "ve0.h"
#include <automask.h>
#include <colors.h>
#include <modtbapp.h>
#include <recset.h>
#include <tabmod.h>
#include "../cg/cglib01.h"
///////////////////////////////////////////////////////////
// Applicazione per gestione maschere di modulo
///////////////////////////////////////////////////////////
class TVE_tab_mod_app : public TTable_module_application
{
};
///////////////////////////////////////////////////////////
// Maschera di gestione tabella CVM:
// Condizioni di vendita per categoria e gruppo merceologico
///////////////////////////////////////////////////////////
#include "vetbcvm.h"
class TCVM_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TCVM_mask();
};
TCVM_mask::TCVM_mask() : TAutomask("vetbcvm")
{
TSheet_field& s = sfield(F_CVM_SHT);
s.set_nav_column(F_CVM_SOTTOCONTO, F_CVM_DESCONTO);
}
bool TCVM_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch(o.dlg())
{
case F_CVM_SHT:
switch (e)
{
case se_query_add:
case se_query_del:
return false; // Non sono ammesse aggiunte o cancellazioni
case se_notify_modify:
{
TSheet_field& s = (TSheet_field&)o;
TToken_string& row = s.row(jolly);
const long sc = row.get_long(s.cid2index(F_CVM_SOTTOCONTO));
if (sc > 0) // Colora le righe valide
s.set_back_and_fore_color(REQUIRED_BACK_COLOR, NORMAL_COLOR, jolly);
else
s.set_back_and_fore_color(COLOR_INVALID, COLOR_INVALID, jolly);
}
break;
default: break;
}
default: break;
}
return true;
}
class TCVM_tab_app : public TRelation_application
{
TCVM_mask* _msk;
TRelation* _rel;
protected:
int find_cve(TSheet_field& s, const TString& cve) const;
public:
virtual TMask* get_mask(int) { return _msk; }
virtual TRelation* get_relation() const { return _rel; }
virtual bool user_create();
virtual bool user_destroy();
virtual void init_query_mode(TMask& m);
virtual void init_insert_mode(TMask& m);
virtual void init_modify_mode(TMask& m);
virtual int read(TMask& m);
virtual int write(const TMask& m);
virtual int rewrite(const TMask& m);
virtual bool remove();
};
void TCVM_tab_app::init_query_mode(TMask& m)
{
m.enable(-2);
m.hide(-3);
}
void TCVM_tab_app::init_insert_mode(TMask& m)
{
m.disable(-2);
m.show(-3);
read(m);
}
void TCVM_tab_app::init_modify_mode(TMask& m)
{
m.disable(-2);
m.show(-3);
}
bool TCVM_tab_app::user_create()
{
_rel = new TRelation("CRA");
_msk = new TCVM_mask;
return true;
}
int TCVM_tab_app::find_cve(TSheet_field& s, const TString& cve) const
{
int mini = 0, maxi = s.items()-1, midi = 0;
TString8 code;
while (mini <= maxi)
{
midi = (mini+maxi) / 2;
s.row(midi).get(0, code);
const int cmp = code.compare(cve);
if (cmp == 0)
break;
if (cmp > 0)
maxi = midi-1;
else
mini = midi+1;
}
return code == cve ? midi : -1;
}
int TCVM_tab_app::read(TMask& m)
{
TSheet_field& s = m.sfield(F_CVM_SHT);
s.destroy();
const TString& code = m.get(F_CVM_COD);
if (code.full())
{
TISAM_recordset gm("USE CVE");
for (bool ok = gm.move_first(); ok; ok = gm.move_next())
{
TToken_string& row = s.row(-1);
row = gm.get("CODTAB").as_string();
row.add(gm.get("S0").as_string());
}
}
if (!s.empty())
{
TISAM_recordset cvm("USE &CVM\nFROM CODTAB=#COD\nTO CODTAB=#COD");
cvm.set_var("#COD", code);
TString8 cve;
for (bool ok = cvm.move_first(); ok; ok = cvm.move_next())
{
cve = cvm.get("CODTAB[4,5]").as_string();
const int i = find_cve(s, cve);
if (i >= 0)
{
const int gr = cvm.get("I0").as_int();
const int co = cvm.get("I1").as_int();
const long so = cvm.get("I2").as_int();
if (so > 0)
{
TBill zio(gr, co, so);
TToken_string& row = s.row(i);
zio.add_to(row, 2, 0x2);
s.set_back_and_fore_color(REQUIRED_BACK_COLOR, NORMAL_COLOR, i);
}
}
}
}
return s.empty() ? _iskeynotfound : NOERR;
}
int TCVM_tab_app::write(const TMask& m)
{
TSheet_field& s = m.sfield(F_CVM_SHT);
TModule_table cvm("&CVM");
FOR_EACH_SHEET_ROW(s, i, row)
{
const TBill zio(*row, 2);
TString16 code = m.get(F_CVM_COD);
code << row->get(0);
cvm.put("CODTAB", code);
if (zio.ok())
{
cvm.put("I0", zio.gruppo());
cvm.put("I1", zio.conto());
cvm.put("I2", zio.sottoconto());
cvm.rewrite_write();
}
else
{
cvm.remove();
}
}
return NOERR;
}
int TCVM_tab_app::rewrite(const TMask& m)
{
return write(m);
}
bool TCVM_tab_app::remove()
{
const TString4 code = get_relation()->curr().get("CODTAB");
TISAM_recordset cvm("USE &CVM\nFROM CODTAB=#COD\nTO CODTAB=#COD");
cvm.set_var("#COD", code);
TLocalisamfile& f = cvm.cursor()->file();
for (bool ok = cvm.move_first(); ok; ok = cvm.move_next())
f.remove();
return true;
}
bool TCVM_tab_app::user_destroy()
{
delete _msk;
delete _rel;
return true;
}
///////////////////////////////////////////////////////////
// Selettore applicazione per gestione maschere di modulo
///////////////////////////////////////////////////////////
int ve0600(int argc, char* argv[])
{
TString4 tab = argv[2];
tab.upper(); tab.strip("&");
if (tab == "CVM")
{
TCVM_tab_app a;
a.run(argc, argv, TR("Conti per categoria e gruppo"));
}
else
{
TVE_tab_mod_app a;
a.run(argc, argv, TR("Tabelle modulo vendite"));
}
return 0;
}