campo-sirio/co/co0700.cpp
alex d52681f795 Patch level : 10.0 265
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Riportata la versione 3.2 patch 1353


git-svn-id: svn://10.65.10.50/trunk@18581 c028cbd2-c16b-5b4b-a496-9718f37d4682
2009-03-23 10:37:33 +00:00

436 lines
9.5 KiB
C++
Executable File

#include "../ve/velib.h"
#include "../ve/sconti.h"
#include "../mg/mglib.h"
#include "../ve/vepriv.h"
#include "../ve/veuml.h"
#include <automask.h>
#include <defmask.h>
#include <execp.h>
#include <agasys.h>
#include <recset.h>
#include <tabutil.h>
#include <utility.h>
#include "../mg/anamag.h"
#include "../ve/ve0100.h"
#include "../ve/veini.h"
#include "../ve/veuml.h"
#include "../ve/veuml1.h"
#include "../ve/verig.h"
#include <clifo.h>
#include "socicoop.h"
#include "co0700b.h"
#include <user.h>
#include "colib.h"
// Definizione della classe dell'applicazione motore
class TConferimenti_application : public TMotore_application
{
TAssoc_array _masks; // assoc_array delle maschere da utilizzare
TString4 _tipodoc;
real _ritprezzo;
real _ritqta;
TString_array _speserit;
protected:
virtual TMask* get_mask( int mode );
virtual void on_firm_change();
virtual int read( TMask& m );
int write( const TMask& m );
int rewrite( const TMask& m );
real get_perc_socio(const long codsocio, const TString& codcomp) const;
public:
virtual TMask & query_mask();
virtual TDocumento_mask & edit_mask() const;
real ritprezzo() {return _ritprezzo;};
real ritqta() {return _ritqta;};
TString_array& speserit() {return _speserit;};
TConferimenti_application() {}
};
inline TConferimenti_application& cfapp() { return (TConferimenti_application &) main_app(); };
// maschera di ricerca
class TConferimenti_query_mask : public TAutomask
{
protected:
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TConferimenti_query_mask() : TAutomask("co0700a") {}
virtual ~TConferimenti_query_mask() {}
};
// maschera di edit
class TConferimenti_mask : public TDocumento_mask
{
bool _rigaspesa;
protected:
public:
virtual TVariable_mask* riga_mask(int numriga);
TConferimenti_mask(const char* tipodoc);
virtual ~TConferimenti_mask() {}
};
bool genera_handler(TMask_field& f, KEY key)
{
if (key == K_SPACE)
{
TConferimenti_mask& m = (TConferimenti_mask&) f.mask();
TMask select_mask("co0700b");
TDocumento campione(m.doc());
const TDate datadoc = campione.get_date(DOC_DATADOC);
long codsocio = campione.get_long(DOC_CODCF);
campione.zero(DOC_NDOC);
if (select_mask.run() == K_ENTER)
{
TISAM_recordset recset("USE SOCICOOP\nFROM CODCF=#DASOCIO\nTO CODCF=#ASOCIO");
recset.set_var("#DASOCIO", select_mask.get_long(F_DASOCIO));
recset.set_var("#ASOCIO", select_mask.get_long(F_ASOCIO));
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{
const long socio = recset.get(SC_CODCF).as_int();
if (socio != codsocio)
{
const TDate dataass = recset.get(SC_DATAASS).as_date();
const TDate datarec = recset.get(SC_DATAREC).as_date();
const bool ok = (!dataass.ok() || dataass <= datadoc) && (!datarec.ok() || datarec >= datadoc);
if (ok)
{
TDocumento d(campione);
d.put(DOC_CODCF, socio);
d.write();
}
}
}
}
}
return true;
}
TConferimenti_mask::TConferimenti_mask(const char* tipodoc):
TDocumento_mask(tipodoc)
{
const int pos = id2pos(499);
if (pos >= 0)
set_handler(499, genera_handler);
}
int TConferimenti_application::rewrite( const TMask& m )
{
int err = NOERR;
const TTipo_documento tipodoc(m.get(172));
TDocumento & doc = ((TConferimenti_mask & )m).doc();
if (tipodoc.tipo() == 5)
{
const long codmercato = m.get_long(343);
doc.put("SPESEUPD", false);
doc.put("RAGGR", true);
update_spese_doc(codmercato, doc);
}
const int nrows = doc.physical_rows();
if (tipodoc.tipo() == 6)
for (int r = nrows; r >= 1; r--)
{
TRiga_documento & row = doc[r];
if (row.is_spese())
{
const TSpesa_prest & s = row.spesa();
if (s.get("S11") == "D")
{
real val = row.get_real(RDOC_PREZZO);
val = -val;
row.put(RDOC_PREZZO, val);
}
}
}
err = TMotore_application::rewrite(m);
return err;
}
int TConferimenti_application::read( TMask& m )
{
int err = TMotore_application::read(m);
TDocumento & doc = ((TConferimenti_mask & )m).doc();
TSheet_field & sf = ((TConferimenti_mask & )m).sfield(F_SHEET);
const int nrows = doc.physical_rows();
const TTipo_documento tipodoc(m.get(172));
if (err == NOERR && tipodoc.tipo() == 6)
{
for (int r = nrows; r >= 1; r--)
{
TRiga_documento & row = doc[r];
if (row.is_spese())
{
const TSpesa_prest & s = row.spesa();
if (s.get("S11") == "D")
{
real val = row.get_real(RDOC_PREZZO);
val = -val;
row.put(RDOC_PREZZO, val);
row.autoload(sf);;
}
}
sf.force_update();
}
}
return err;
}
int TConferimenti_application::write( const TMask& m )
{
int err = NOERR;
TDocumento & doc = ((TConferimenti_mask & )m).doc();
const int nrows = doc.physical_rows();
bool zero_doc = true;
const TTipo_documento tipodoc(m.get(172));
for (int r = nrows; r >= 1; r--)
{
TRiga_documento & row = doc[r];
if (row.imponibile() != ZERO)
{
zero_doc = false;
if (tipodoc.tipo() == 6 && row.is_spese())
{
const TSpesa_prest & s = row.spesa();
if (s.get("S11") == "D")
{
real val = row.get_real(RDOC_PREZZO);
val = -val;
row.put(RDOC_PREZZO, val);
}
}
}
}
if (zero_doc)
return false;
if (tipodoc.tipo() == 5)
{
const char confda = m.get(401)[0];
const long codmercato = m.get_long(343);
if (confda=='S') // conferimento da socio
{
TDocumento & doc = ((TConferimenti_mask & )m).doc();
doc.put("SPESEUPD", false);
doc.put("RAGGR", true);
update_spese_doc(codmercato, doc);
err = TMotore_application::write(m);
}
else // conferimento da compagnia
{
TDocumento& doc = ((TConferimenti_mask&) m).doc();
if (doc.physical_rows() > 0)
{
const long nfasta = m.get_long(345);
const TString8 codcomp = m.get(344);
TLista_documenti listadoc;
if (compagnia2soci(doc, codcomp, codmercato, nfasta, listadoc) > 0)
err = listadoc.write();
}
}
}
else
err = TMotore_application::write(m);
return err;
}
void TConferimenti_application::on_firm_change()
{
TConfig d(CONFIG_DITTA, "co");
_ritprezzo = real(d.get("RitPrezzo"));
_ritqta = real(d.get("RitQta"));
}
TMask& TConferimenti_application::query_mask()
{
TMask* m = (TMask*) _masks.objptr("co0700a");
if (m == NULL)
{
m = new TConferimenti_query_mask();
_masks.add("co0700a", m);
}
return *m;
}
TDocumento_mask& TConferimenti_application::edit_mask() const
{
TDocumento_mask* m = (TDocumento_mask*) _masks.objptr(_tipodoc);
if (m == NULL)
{
m = new TConferimenti_mask(_tipodoc);
((TAssoc_array&)_masks).add(_tipodoc, m);
}
return *m;
}
TMask* TConferimenti_application::get_mask( int mode )
{
TMask* m = NULL;
if (mode == MODE_MOD || mode == MODE_INS)
{
_tipodoc = query_mask().get(F_TIPODOC);
m = &edit_mask();
}
else
m = &query_mask();
return m;
}
bool TConferimenti_query_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_ANNO:
if (e == fe_modify)
app().update_navigation_bar();
break;
case F_CODNUM:
if (e == fe_modify)
{
TMask& m = o.mask();
TTable & tabnum = ((TTable &) ((TEdit_field &)o).browse()->cursor()->file());
if ( tabnum.good())
{
TCodice_numerazione cod_num(tabnum.curr());
m.set( F_DESNUM, cod_num.descrizione());
// Propone il primo tipo di documento come default
if (m.field(F_TIPODOC).empty() || o.focusdirty())
{
m.set( F_TIPODOC, cod_num.tipo_doc(0));
m.send_key( K_TAB, F_TIPODOC );
}
// Setta la numerazione a definitiva
}
else
{
m.set( F_DESNUM, "" );
m.set( F_TIPODOC, "" );
}
app().update_navigation_bar();
}
break;
case F_TIPODOC:
if (e == fe_modify)
{
TMask& m = o.mask();
if (m.get(F_TIPODOC).full())
{
TCodice_numerazione cod_num(m.get(F_CODNUM));
const TString& tipo = o.get();
int last = cod_num.ntipi_doc();
for (int i = 0; i < last; i++ )
{
const TString& curtipo = cod_num.tipo_doc(i);
if (curtipo == tipo)
return TRUE;
}
return o.error_box(TR("Tipo non valido per la numerazione selezionata!"));
}
}
break;
case F_NUMDOCRIF:
if (e == fe_button)
TDocumento_mask::numdocrif_search_handler(o, K_F9);
break;
case F_RAGSOCSEARCH:
if (e == fe_button)
TDocumento_mask::ragsoc_search_handler(o, K_F9);
break;
default:
break;
}
return true;
}
bool confer_codart_handler(TMask_field& f, KEY key)
{
bool ok = codart_handler(f, key);
TMask& row_mask = f.mask();
if (ok && f.to_check(key))
{
row_mask.set(FR_SCONTO, cfapp().ritprezzo(), true);
const TString & cod = row_mask.get(FR_CODARTMAG);
if (cod.full())
{
const TString & codiva = cache().get(LF_ANAMAG, cod, ANAMAG_CODIVA);
if (codiva.full())
row_mask.set(FR_CODIVA, codiva);
}
}
return ok;
}
bool confer_qtagg1_handler(TMask_field& f, KEY key)
{
if (f.to_check(key))
{
TMask& row_mask = f.mask();
real qtagg1 = f.get();
real qta = qtagg1*cfapp().ritqta()/CENTO;
row_mask.set(FR_QTA, qtagg1-qta, true);
}
return true;
}
TVariable_mask* TConferimenti_mask::riga_mask(int numriga)
{
TVariable_mask* m = TDocumento_mask::riga_mask(numriga);
const TRiga_documento& riga = doc()[numriga + 1];
const TTipo_riga_documento& tiporiga = riga.tipo();
if (tiporiga.tipo() == 'M') // riga merce
{
m->set_handler(FR_CODART, confer_codart_handler);
m->set_handler(FR_QTAGG1, confer_qtagg1_handler);
}
return m;
}
int co0700( int argc, char* argv[])
{
TConferimenti_application a;
a.run( argc, argv, TR("Conferimenti cooperative"));
return 0;
}