2006-12-13 16:22:33 +00:00
|
|
|
|
#include "mglib.h"
|
1997-02-28 11:56:16 +00:00
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
|
#include "../cg/cglib01.h"
|
|
|
|
|
#include "../db/dblib.h"
|
2000-05-05 15:25:49 +00:00
|
|
|
|
#include "../ve/veconf.h"
|
1998-08-25 18:07:30 +00:00
|
|
|
|
|
2006-12-13 16:22:33 +00:00
|
|
|
|
#include <relapp.h>
|
|
|
|
|
#include <msksheet.h>
|
|
|
|
|
|
2008-10-07 00:50:22 +00:00
|
|
|
|
#include "anamag.h"
|
1999-04-06 15:34:39 +00:00
|
|
|
|
#include "mg1100.h"
|
2001-05-02 13:40:49 +00:00
|
|
|
|
#include <cfven.h>
|
1997-02-28 11:56:16 +00:00
|
|
|
|
|
1997-05-23 15:01:37 +00:00
|
|
|
|
// maschera dell'applicazione "Gestione interattiva movimenti di magazzino"
|
1997-02-28 11:56:16 +00:00
|
|
|
|
//
|
1999-04-06 15:34:39 +00:00
|
|
|
|
class TMask_movmag : public TMask
|
1998-08-25 18:07:30 +00:00
|
|
|
|
{
|
1998-11-04 18:04:26 +00:00
|
|
|
|
TMov_mag * _mov_mag;
|
2006-12-13 16:22:33 +00:00
|
|
|
|
TCodice_articolo _price_codart;
|
1997-06-18 08:58:52 +00:00
|
|
|
|
real price_quant;
|
|
|
|
|
bool price_proposed;
|
1997-07-28 10:32:58 +00:00
|
|
|
|
real proposed_price(const char * codart, real quant,const char * causrig);
|
2007-11-27 13:00:40 +00:00
|
|
|
|
int _autorows;
|
1997-07-07 10:55:47 +00:00
|
|
|
|
|
1998-08-25 18:07:30 +00:00
|
|
|
|
// aggiorna la riga di magazzino aggiungendo righe automatiche o esplosioni
|
2000-05-05 15:25:49 +00:00
|
|
|
|
bool update_rigamov(int r, const char * old_codcaus, const char * old_codart, const real & old_quant);
|
|
|
|
|
bool add_autorows(int r, const char * old_codcaus, const char * old_codart, const real & old_quant);
|
|
|
|
|
bool add_explrows(int r);
|
1999-07-16 14:59:11 +00:00
|
|
|
|
TMagazzini _magazzini;
|
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
|
bool qta_inventory(real & qta);
|
1997-06-18 08:58:52 +00:00
|
|
|
|
|
|
|
|
|
static bool notify_righe(TSheet_field & fld_righe, int item, KEY k); // notify delle righe di sheet
|
|
|
|
|
static bool handle_righe(TMask_field &f, KEY k); // handler delle righe
|
1997-07-28 10:32:58 +00:00
|
|
|
|
static bool handle_righeprezzo1(TMask_field &f, KEY k); // handler del prezzo delle righe
|
|
|
|
|
static bool handle_righeprezzo2(TMask_field &f, KEY k); // handler del prezzo delle righe
|
1997-06-18 08:58:52 +00:00
|
|
|
|
static bool handle_codcaus(TMask_field &fld, KEY k); // handler della causale
|
|
|
|
|
static bool handle_datacomp(TMask_field &, KEY k); // handler del numero di registrazione
|
2003-01-28 13:33:45 +00:00
|
|
|
|
static bool handle_checksosp(TMask_field &fld, KEY k); // handler
|
1998-11-04 18:04:26 +00:00
|
|
|
|
static bool handle_codarticolo(TMask_field &fld, KEY k); // handler
|
2003-01-28 13:33:45 +00:00
|
|
|
|
static bool handle_causrig(TMask_field &fld, KEY k); // handler
|
1998-11-04 18:04:26 +00:00
|
|
|
|
static bool handle_giacattuale(TMask_field &fld, KEY k); // handler della giacenza attuale
|
|
|
|
|
static bool codgrp_handler(TMask_field &fld, KEY k); // handler del codice gruppo
|
1997-06-18 08:58:52 +00:00
|
|
|
|
static void sheetrighe_put(TSheet_field &fld_righe, int item);
|
|
|
|
|
static void sheetrighe_get(TSheet_field &fld_righe, int item);
|
1997-02-28 11:56:16 +00:00
|
|
|
|
public:
|
2006-04-13 17:56:02 +00:00
|
|
|
|
void update_tot();
|
2006-12-13 16:22:33 +00:00
|
|
|
|
const TMagazzini& magazzini() const { return _magazzini; }
|
2007-11-27 13:00:40 +00:00
|
|
|
|
int autorows() const { return _autorows;}
|
2006-12-13 16:22:33 +00:00
|
|
|
|
|
|
|
|
|
TMask_movmag(TMov_mag* m_m);
|
1997-06-18 08:58:52 +00:00
|
|
|
|
virtual ~TMask_movmag();
|
1997-02-28 11:56:16 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
1998-11-04 18:04:26 +00:00
|
|
|
|
// HANDLER DEL CODICE LIVELLO anagrafica
|
|
|
|
|
bool TMask_movmag::codgrp_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
if ((k == K_TAB && f.focusdirty() ||k == K_ENTER ) && !f.empty())
|
|
|
|
|
{
|
1999-10-22 10:00:18 +00:00
|
|
|
|
if (!livelli_giacenza().enabled())
|
1998-11-04 18:04:26 +00:00
|
|
|
|
{
|
2004-05-18 10:44:57 +00:00
|
|
|
|
f.error_box(TR("Livelli del codice non abilitati"));
|
1998-11-04 18:04:26 +00:00
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
const int levnum=1+f.dlg()-F_LIV1;
|
1999-10-22 10:00:18 +00:00
|
|
|
|
return livelli_giacenza().autoinsert(levnum,f);
|
1998-11-04 18:04:26 +00:00
|
|
|
|
}
|
2007-11-27 13:00:40 +00:00
|
|
|
|
return true;
|
1998-11-04 18:04:26 +00:00
|
|
|
|
}
|
|
|
|
|
|
1997-07-07 10:55:47 +00:00
|
|
|
|
|
1997-02-28 11:56:16 +00:00
|
|
|
|
// costruttore della maschera anagrafica di magazzino
|
|
|
|
|
//TMask_movmag::TMask_movmag() :
|
1999-10-22 10:00:18 +00:00
|
|
|
|
TMask_movmag::TMask_movmag(TMov_mag * m_m)
|
1999-07-16 14:59:11 +00:00
|
|
|
|
: TMask("mg1100")
|
1997-02-28 11:56:16 +00:00
|
|
|
|
{
|
1998-11-04 18:04:26 +00:00
|
|
|
|
_mov_mag = m_m;
|
1997-06-18 08:58:52 +00:00
|
|
|
|
// setta handler e notify
|
2006-12-13 16:22:33 +00:00
|
|
|
|
TSheet_field& ss = sfield(F_RIGHE);
|
|
|
|
|
TMask& sm = ss.sheet_mask();
|
|
|
|
|
|
1997-05-23 15:01:37 +00:00
|
|
|
|
set_handler(F_DATACOMP, handle_datacomp);
|
1997-02-28 11:56:16 +00:00
|
|
|
|
set_handler(F_CODCAUS, handle_codcaus);
|
2006-12-13 16:22:33 +00:00
|
|
|
|
sm.field(F_QUANT).set_handler(handle_righeprezzo1);
|
|
|
|
|
sm.field(F_CAUSRIG).set_handler(handle_causrig);
|
|
|
|
|
sm.field(F_CODART).set_handler(handle_codarticolo);
|
|
|
|
|
sm.field(F_GIAC).set_handler(handle_giacattuale);
|
1997-06-12 15:30:01 +00:00
|
|
|
|
ss.set_notify(notify_righe);
|
|
|
|
|
ss.set_handler(handle_righe);
|
|
|
|
|
ss.set_userget(sheetrighe_get);
|
|
|
|
|
ss.set_userput(sheetrighe_put);
|
1997-06-18 08:58:52 +00:00
|
|
|
|
ss.set_lines_record(m_m->body());
|
|
|
|
|
// setta i campi della maschera
|
|
|
|
|
// per la pagina giacenze
|
2006-12-13 16:22:33 +00:00
|
|
|
|
|
2001-05-02 13:40:49 +00:00
|
|
|
|
|
1997-07-23 15:47:36 +00:00
|
|
|
|
// setta le colonne in base all'abilitazione dei livelli di giacenza
|
2006-12-13 16:22:33 +00:00
|
|
|
|
livelli_giacenza().set_sheet_columns(ss, F_LIV1);
|
2001-05-02 13:40:49 +00:00
|
|
|
|
|
1998-11-04 18:04:26 +00:00
|
|
|
|
// abilita i controlli
|
2006-12-13 16:22:33 +00:00
|
|
|
|
for (int l=0; l<4; l++) if (livelli_giacenza().autoinsert(1+l))
|
|
|
|
|
{
|
|
|
|
|
sm.efield(F_LIV1+l).check_type(CHECK_SEARCH);
|
|
|
|
|
sm.field(F_LIV1+l).set_handler(codgrp_handler);
|
|
|
|
|
}
|
1997-06-18 08:58:52 +00:00
|
|
|
|
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
|
1997-06-09 10:53:47 +00:00
|
|
|
|
if (prassid.get_bool("GES", NULL, A_LISTINI))
|
1997-07-25 10:10:42 +00:00
|
|
|
|
field(F_CATVEN).show(prassid.get_bool("GESLISCV"));
|
1997-06-18 08:58:52 +00:00
|
|
|
|
else
|
1997-07-25 10:10:42 +00:00
|
|
|
|
field(F_CATVEN).hide();
|
1997-08-20 09:39:42 +00:00
|
|
|
|
|
2006-12-13 16:22:33 +00:00
|
|
|
|
const bool gmm = magazzini().gestmultimag();
|
|
|
|
|
sm.field(F_DESMAG).enable(gmm);
|
|
|
|
|
ss.enable_column(ss.cid2index(F_CODMAG),gmm);
|
|
|
|
|
|
|
|
|
|
const bool gd = magazzini().gestdep();
|
|
|
|
|
sm.field(F_DESDEP).enable(gd);
|
|
|
|
|
ss.enable_column(ss.cid2index(F_CODDEP),gd);
|
2007-11-27 13:00:40 +00:00
|
|
|
|
_autorows = prassid.get_int("AUTOROWS", "mg");
|
1997-02-28 11:56:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TMask_movmag::~TMask_movmag()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// item varies from 1 to items()
|
|
|
|
|
void TMask_movmag::sheetrighe_get(TSheet_field &fld_righe, int item)
|
|
|
|
|
{
|
|
|
|
|
// prende il record della riga corrente dal record array
|
1997-06-18 08:58:52 +00:00
|
|
|
|
TRectype &rec= fld_righe.record()->row(item, TRUE);
|
1997-02-28 11:56:16 +00:00
|
|
|
|
TToken_string &row= fld_righe.row(item-1);
|
|
|
|
|
// codici di livello
|
1999-10-22 10:00:18 +00:00
|
|
|
|
row.add( livelli_giacenza().unpack_grpcode(rec.get("LIVGIAC") ,1),fld_righe.cid2index(F_LIV1) );
|
|
|
|
|
row.add( livelli_giacenza().unpack_grpcode(rec.get("LIVGIAC") ,2),fld_righe.cid2index(F_LIV2) );
|
|
|
|
|
row.add( livelli_giacenza().unpack_grpcode(rec.get("LIVGIAC") ,3),fld_righe.cid2index(F_LIV3) );
|
|
|
|
|
row.add( livelli_giacenza().unpack_grpcode(rec.get("LIVGIAC") ,4),fld_righe.cid2index(F_LIV4) );
|
1997-02-28 11:56:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// item varies from 1 to items()
|
|
|
|
|
void TMask_movmag::sheetrighe_put(TSheet_field &fld_righe, int item)
|
|
|
|
|
{
|
|
|
|
|
TToken_string &row= fld_righe.row(item-1);
|
|
|
|
|
|
1997-06-18 08:58:52 +00:00
|
|
|
|
TRectype &recrighe= fld_righe.record()->row(item, TRUE);
|
|
|
|
|
// codici livello
|
2006-12-13 16:22:33 +00:00
|
|
|
|
if (livelli_giacenza().enabled())
|
|
|
|
|
{
|
1997-06-18 08:58:52 +00:00
|
|
|
|
TString16 packedcode;
|
1999-10-22 10:00:18 +00:00
|
|
|
|
livelli_giacenza().pack_grpcode(packedcode,row.get(fld_righe.cid2index(F_LIV1)),1);
|
|
|
|
|
livelli_giacenza().pack_grpcode(packedcode,row.get(fld_righe.cid2index(F_LIV2)),2);
|
|
|
|
|
livelli_giacenza().pack_grpcode(packedcode,row.get(fld_righe.cid2index(F_LIV3)),3);
|
|
|
|
|
livelli_giacenza().pack_grpcode(packedcode,row.get(fld_righe.cid2index(F_LIV4)),4);
|
1997-06-18 08:58:52 +00:00
|
|
|
|
recrighe.put("LIVGIAC", packedcode);
|
|
|
|
|
}
|
1997-02-28 11:56:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
1997-06-12 15:30:01 +00:00
|
|
|
|
bool TMask_movmag::handle_righe(TMask_field &f, KEY k)
|
|
|
|
|
{
|
1998-08-25 18:07:30 +00:00
|
|
|
|
if (k == K_ENTER)
|
|
|
|
|
{
|
2003-06-19 14:52:12 +00:00
|
|
|
|
TSheet_field& ss = (TSheet_field&)f;
|
1998-08-25 18:07:30 +00:00
|
|
|
|
|
2006-12-13 16:22:33 +00:00
|
|
|
|
const int idx_codart = ss.cid2index(F_CODART);
|
2003-06-19 14:52:12 +00:00
|
|
|
|
for (int i = ss.items()-1; i >= 0; i--)
|
|
|
|
|
{
|
2006-12-13 16:22:33 +00:00
|
|
|
|
if (*ss.cell(i,idx_codart) <= ' ') // Riga senza codice articolo = vuota
|
2003-06-19 14:52:12 +00:00
|
|
|
|
ss.destroy(i);
|
|
|
|
|
}
|
|
|
|
|
|
2006-12-13 16:22:33 +00:00
|
|
|
|
const int idx_codmag = ss.cid2index(F_CODMAG);
|
|
|
|
|
if (ss.column_enabled(idx_codmag))
|
1997-06-18 08:58:52 +00:00
|
|
|
|
{
|
1998-08-25 18:07:30 +00:00
|
|
|
|
for (int i = 0; i < ss.items(); i++)
|
1997-06-18 08:58:52 +00:00
|
|
|
|
{
|
2006-12-13 16:22:33 +00:00
|
|
|
|
if (*ss.cell(i,idx_codmag) <= ' ')
|
|
|
|
|
return f.error_box(FR("Nella riga %d manca l'indicazione del magazzino"),i+1);
|
1997-06-18 08:58:52 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
1997-06-12 15:30:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
2006-04-13 17:56:02 +00:00
|
|
|
|
void TMask_movmag::update_tot()
|
|
|
|
|
{
|
2006-12-13 16:22:33 +00:00
|
|
|
|
TSheet_field& ss = sfield(F_RIGHE);
|
|
|
|
|
const int idx_val = ss.cid2index(F_VALORE); // Posizione del valore
|
|
|
|
|
real valore, tot;
|
2006-04-13 17:56:02 +00:00
|
|
|
|
|
2006-12-13 16:22:33 +00:00
|
|
|
|
FOR_EACH_SHEET_ROW(ss, i, row)
|
2006-04-13 17:56:02 +00:00
|
|
|
|
{
|
2006-12-13 16:22:33 +00:00
|
|
|
|
row->get(idx_val, valore);
|
2006-04-13 17:56:02 +00:00
|
|
|
|
tot += valore;
|
|
|
|
|
}
|
|
|
|
|
set(F_VALORE_TOT, tot);
|
|
|
|
|
}
|
|
|
|
|
|
2006-12-13 16:22:33 +00:00
|
|
|
|
bool TMask_movmag::notify_righe(TSheet_field& ss, int r, KEY key)
|
1997-06-12 15:30:01 +00:00
|
|
|
|
{
|
2006-12-13 16:22:33 +00:00
|
|
|
|
static TString8 old_codcaus;
|
|
|
|
|
static TCodice_articolo old_codart;
|
|
|
|
|
static real old_quant = UNO;
|
|
|
|
|
static bool selecting = false;
|
|
|
|
|
|
|
|
|
|
TMask_movmag& m= (TMask_movmag&)ss.mask();
|
1997-06-12 15:30:01 +00:00
|
|
|
|
if ( key == K_DEL ) // Cancellazione
|
|
|
|
|
{
|
1997-06-18 08:58:52 +00:00
|
|
|
|
if (*ss.cell(r,ss.cid2index( F_AUTOMATICA))==riga_automatica)
|
|
|
|
|
return FALSE; // can't remove auto lines directly
|
1998-08-25 18:07:30 +00:00
|
|
|
|
while (r < ss.items()-1 && *ss.cell(r+1,ss.cid2index( F_AUTOMATICA))==riga_automatica)
|
1997-06-12 15:30:01 +00:00
|
|
|
|
{
|
1998-08-25 18:07:30 +00:00
|
|
|
|
// autoremove automatic lines along with the original one
|
|
|
|
|
ss.destroy(r+1);
|
1997-06-12 15:30:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
2006-12-13 16:22:33 +00:00
|
|
|
|
} else
|
|
|
|
|
if ( key == K_CTRL + K_DEL ) // Cancellazione
|
2006-04-13 17:56:02 +00:00
|
|
|
|
{
|
|
|
|
|
m.update_tot();
|
|
|
|
|
} else if (key == K_INS) { // Inserimento
|
1997-08-21 06:55:09 +00:00
|
|
|
|
if (r < ss.items() && *ss.cell(r,ss.cid2index( F_AUTOMATICA))==riga_automatica)
|
1997-08-20 09:39:42 +00:00
|
|
|
|
return FALSE; // cannot insert between a row and its generated one
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
2006-12-13 16:22:33 +00:00
|
|
|
|
} else
|
|
|
|
|
if (key == K_CTRL + K_INS) { // Inserimento accordato
|
1998-11-04 18:04:26 +00:00
|
|
|
|
// Magazzino e Deposito di default: controlla prima quelli della causale,
|
|
|
|
|
// quindi se non sono settati, prende quelli di default
|
2006-12-13 16:22:33 +00:00
|
|
|
|
TToken_string key;
|
2004-11-30 22:02:59 +00:00
|
|
|
|
key.add(m.get(F_TIPOCF));
|
|
|
|
|
key.add(m.get(F_CODCF));
|
|
|
|
|
|
2006-12-13 16:22:33 +00:00
|
|
|
|
TString4 stdmag = cache().get(LF_CFVEN, key, CFV_CODMAG);
|
|
|
|
|
TString4 stddep;
|
|
|
|
|
|
|
|
|
|
if (stdmag.full())
|
2004-11-30 22:02:59 +00:00
|
|
|
|
stddep = cache().get(LF_CFVEN, key, CFV_CODDEP);
|
|
|
|
|
else
|
|
|
|
|
{
|
2006-12-13 16:22:33 +00:00
|
|
|
|
const TCausale_magazzino cau(m.get(F_CODCAUS));
|
2004-11-30 22:02:59 +00:00
|
|
|
|
|
2006-12-13 16:22:33 +00:00
|
|
|
|
if (cau.default_magdep().full())
|
2004-11-30 22:02:59 +00:00
|
|
|
|
{
|
|
|
|
|
stdmag = cau.default_mag();
|
|
|
|
|
stddep = cau.default_dep();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
stdmag = m.magazzini().standardmag();
|
|
|
|
|
stddep = m.magazzini().standarddep();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2006-12-13 16:22:33 +00:00
|
|
|
|
if (stdmag.full())
|
1997-06-12 15:30:01 +00:00
|
|
|
|
{
|
2006-12-13 16:22:33 +00:00
|
|
|
|
TToken_string& row = ss.row(r);
|
|
|
|
|
row.add(stdmag, ss.cid2index(F_CODMAG));
|
|
|
|
|
row.add(stddep, ss.cid2index(F_CODDEP));
|
1997-06-12 15:30:01 +00:00
|
|
|
|
}
|
1997-08-21 06:55:09 +00:00
|
|
|
|
ss.select(r);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
2006-12-13 16:22:33 +00:00
|
|
|
|
} else
|
|
|
|
|
if (key == K_SPACE)
|
|
|
|
|
{
|
1999-10-22 10:00:18 +00:00
|
|
|
|
old_codcaus = ss.sheet_mask().get(F_CAUSRIG);
|
1997-06-12 15:30:01 +00:00
|
|
|
|
if (old_codcaus.blank())
|
1999-10-22 10:00:18 +00:00
|
|
|
|
old_codcaus = ss.mask().get(F_CODCAUS);
|
|
|
|
|
if (old_quant != ss.sheet_mask().get_real(F_QUANT))
|
|
|
|
|
{
|
|
|
|
|
old_quant = ss.sheet_mask().get_real(F_QUANT);
|
|
|
|
|
m.qta_inventory(old_quant);
|
|
|
|
|
}
|
|
|
|
|
old_codart = ss.sheet_mask().get(F_CODART);
|
|
|
|
|
|
2006-12-13 16:22:33 +00:00
|
|
|
|
} else
|
|
|
|
|
if (key == K_ENTER)
|
|
|
|
|
{
|
1999-10-22 10:00:18 +00:00
|
|
|
|
if (m.get_bool(F_INVENTORYMODE))
|
|
|
|
|
{
|
|
|
|
|
real diff = ss.sheet_mask().get_real(F_QUANT) ;
|
|
|
|
|
m.qta_inventory(diff);
|
|
|
|
|
if (diff != old_quant)
|
|
|
|
|
{
|
|
|
|
|
ss.sheet_mask().set(F_QUANT, diff);
|
|
|
|
|
ss.row(r).add(diff.string(), ss.cid2index(F_QUANT));
|
|
|
|
|
}
|
|
|
|
|
}
|
1998-08-25 18:07:30 +00:00
|
|
|
|
if (m.update_rigamov(r,old_codcaus,old_codart,old_quant))
|
1998-11-04 18:04:26 +00:00
|
|
|
|
ss.select(r);
|
2006-04-13 17:56:02 +00:00
|
|
|
|
|
|
|
|
|
m.update_tot();
|
2006-12-13 16:22:33 +00:00
|
|
|
|
} else
|
|
|
|
|
if (key == K_TAB && !selecting)
|
|
|
|
|
{
|
|
|
|
|
selecting = true;
|
|
|
|
|
ss.select(r, 1);
|
|
|
|
|
selecting = false;
|
1997-06-12 15:30:01 +00:00
|
|
|
|
}
|
2006-12-13 16:22:33 +00:00
|
|
|
|
return true;
|
1997-06-12 15:30:01 +00:00
|
|
|
|
}
|
1997-02-28 11:56:16 +00:00
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
|
bool TMask_movmag::qta_inventory(real & qta)
|
|
|
|
|
{
|
|
|
|
|
if (get_bool(F_INVENTORYMODE))
|
|
|
|
|
{
|
|
|
|
|
const TMask & sm = sfield(F_RIGHE).sheet_mask();
|
|
|
|
|
qta -= sm.get_real(F_GIAC);
|
|
|
|
|
|
|
|
|
|
TString8 codcau(sm.get(F_CAUSRIG));
|
|
|
|
|
if (codcau.blank())
|
|
|
|
|
codcau = get(F_CODCAUS);
|
|
|
|
|
if (codcau.blank())
|
2004-05-18 10:44:57 +00:00
|
|
|
|
return error_box(TR("La causale non e' indicata"));
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
2006-12-13 16:22:33 +00:00
|
|
|
|
const TCausale_magazzino cau(codcau);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
switch (cau.sgn(s_giac))
|
|
|
|
|
{
|
|
|
|
|
case 1: break;
|
|
|
|
|
case -1: qta = - qta; break;
|
2004-05-18 10:44:57 +00:00
|
|
|
|
default: message_box(TR("La causale indicata non movimenta la giacenza"));
|
1999-10-22 10:00:18 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
1997-02-28 11:56:16 +00:00
|
|
|
|
|
1997-07-28 10:32:58 +00:00
|
|
|
|
// proposta soft: solo se il prezzo <20> non nullo (gi<67> impostato)
|
|
|
|
|
bool TMask_movmag::handle_righeprezzo1(TMask_field &f, KEY k)
|
2000-05-05 15:25:49 +00:00
|
|
|
|
{
|
1997-07-28 10:32:58 +00:00
|
|
|
|
if (f.mask().get(F_PREZZO).blank())
|
|
|
|
|
return handle_righeprezzo2(f, k);
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// proposta hard: propone il prezzo in ogni caso
|
|
|
|
|
bool TMask_movmag::handle_righeprezzo2(TMask_field &f, KEY k)
|
|
|
|
|
{
|
1999-04-06 15:34:39 +00:00
|
|
|
|
if (k == K_TAB)
|
|
|
|
|
{
|
|
|
|
|
TMask& m = f.mask();
|
|
|
|
|
TMask_movmag& mmm = (TMask_movmag&)m.get_sheet()->mask();
|
|
|
|
|
const TString& codart = m.get(F_CODART);
|
|
|
|
|
if (f.focusdirty())
|
1997-06-18 08:58:52 +00:00
|
|
|
|
{
|
1999-04-06 15:34:39 +00:00
|
|
|
|
// propone il prezzo in base alla causale
|
2006-12-13 16:22:33 +00:00
|
|
|
|
if (codart.full() && codart != mmm._price_codart)
|
1999-04-06 15:34:39 +00:00
|
|
|
|
{
|
2006-12-13 16:22:33 +00:00
|
|
|
|
const real prz = mmm.proposed_price(codart, m.get_real(F_QUANT), m.get(F_CAUSRIG));
|
1999-04-06 15:34:39 +00:00
|
|
|
|
m.set(F_PREZZO, prz);
|
|
|
|
|
}
|
1997-06-18 08:58:52 +00:00
|
|
|
|
}
|
1999-04-06 15:34:39 +00:00
|
|
|
|
mmm._price_codart = codart;
|
1997-06-18 08:58:52 +00:00
|
|
|
|
}
|
1997-02-28 11:56:16 +00:00
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
2003-01-28 13:33:45 +00:00
|
|
|
|
bool TMask_movmag::handle_checksosp(TMask_field &f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
if (k==K_TAB && f.focusdirty())
|
|
|
|
|
{
|
|
|
|
|
TMask_movmag& mov_mask = (TMask_movmag &)f.mask().get_sheet()->mask();
|
|
|
|
|
TMask & row_mask = f.mask();
|
|
|
|
|
|
|
|
|
|
|
2006-12-13 16:22:33 +00:00
|
|
|
|
TString8 caus(row_mask.get(F_CAUSRIG));
|
2003-01-28 13:33:45 +00:00
|
|
|
|
if (caus.empty())
|
|
|
|
|
caus = mov_mask.get(F_CODCAUS);
|
2008-10-07 00:50:22 +00:00
|
|
|
|
|
|
|
|
|
const TCausale_magazzino & c = cached_causale_magazzino(caus);
|
2004-05-18 10:44:57 +00:00
|
|
|
|
|
2008-10-07 00:50:22 +00:00
|
|
|
|
if (!c.movimenta_sospesi())
|
|
|
|
|
{
|
|
|
|
|
const bool sospeso = cached_article(row_mask.get(F_CODART)).get_bool(ANAMAG_SOSPESO);
|
|
|
|
|
|
|
|
|
|
if (sospeso)
|
|
|
|
|
return error_box(FR("Articolo %s sospeso, quindi non movimentabile"), (const char *)f.get());
|
|
|
|
|
}
|
2003-01-28 13:33:45 +00:00
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1998-11-04 18:04:26 +00:00
|
|
|
|
bool TMask_movmag::handle_codarticolo(TMask_field &f, KEY k)
|
|
|
|
|
{
|
2004-11-30 22:02:59 +00:00
|
|
|
|
bool ok = true;
|
|
|
|
|
|
|
|
|
|
if (k==K_TAB && f.focusdirty())
|
1998-11-04 18:04:26 +00:00
|
|
|
|
{
|
2004-11-30 22:02:59 +00:00
|
|
|
|
TSheet_field * s = f.mask().get_sheet();
|
|
|
|
|
TMask_movmag& mov_mask = (TMask_movmag &)s->mask();
|
|
|
|
|
TMask & row_mask = f.mask();
|
|
|
|
|
TCodice_articolo codart(row_mask.get(F_CODART));
|
|
|
|
|
TRectype anamag = cache().get(LF_ANAMAG, codart); // anamag puo' cambiare
|
|
|
|
|
|
|
|
|
|
if (anamag.empty())
|
2003-01-28 13:33:45 +00:00
|
|
|
|
{
|
2004-11-30 22:02:59 +00:00
|
|
|
|
TLocalisamfile codalt(LF_CODCORR);
|
|
|
|
|
|
|
|
|
|
codalt.setkey(2);
|
|
|
|
|
codalt.put(CODCORR_CODARTALT, codart);
|
|
|
|
|
if (codalt.read() == NOERR)
|
|
|
|
|
{
|
|
|
|
|
codart = codalt.get(CODCORR_CODART);
|
|
|
|
|
anamag = cache().get(LF_ANAMAG, codart);
|
|
|
|
|
if (!anamag.empty())
|
|
|
|
|
row_mask.set(F_CODART, codart, 0x2);
|
|
|
|
|
else
|
|
|
|
|
return error_box(TR("Articolo assente"));
|
|
|
|
|
}
|
2003-01-28 13:33:45 +00:00
|
|
|
|
}
|
2004-11-30 22:02:59 +00:00
|
|
|
|
|
|
|
|
|
f.check_type(CHECK_REQUIRED);
|
|
|
|
|
ok = f.check(STARTING_CHECK);
|
|
|
|
|
f.check_type(CHECK_SEARCH);
|
|
|
|
|
|
|
|
|
|
if (ok)
|
|
|
|
|
{
|
|
|
|
|
ok = handle_checksosp(f, k);
|
|
|
|
|
if (ok)
|
2008-06-11 10:58:17 +00:00
|
|
|
|
handle_righeprezzo1(f, k);
|
2004-11-30 22:02:59 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
error_box(TR("Articolo assente"));
|
2003-01-28 13:33:45 +00:00
|
|
|
|
}
|
|
|
|
|
|
2004-11-30 22:02:59 +00:00
|
|
|
|
return ok;
|
2003-01-28 13:33:45 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TMask_movmag::handle_causrig(TMask_field &f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
if (k==K_TAB && f.focusdirty())
|
|
|
|
|
{
|
|
|
|
|
if (!handle_checksosp(f, k))
|
|
|
|
|
return FALSE;
|
|
|
|
|
handle_righeprezzo1(f, k);
|
1998-11-04 18:04:26 +00:00
|
|
|
|
}
|
2003-01-28 13:33:45 +00:00
|
|
|
|
|
1998-11-04 18:04:26 +00:00
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
2003-01-28 13:33:45 +00:00
|
|
|
|
|
1998-11-04 18:04:26 +00:00
|
|
|
|
// proposta hard: propone il prezzo in ogni caso
|
|
|
|
|
bool TMask_movmag::handle_giacattuale(TMask_field &f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
TMask & maskrighe =f.mask();
|
|
|
|
|
TMask_movmag &maskmov=(TMask_movmag &)maskrighe.get_sheet()->mask();
|
2001-05-02 13:40:49 +00:00
|
|
|
|
if (k==K_TAB && (!maskmov.is_running() || f.focusdirty()))
|
1998-11-04 18:04:26 +00:00
|
|
|
|
{
|
|
|
|
|
TString codliv;
|
|
|
|
|
// codici livello
|
1999-10-22 10:00:18 +00:00
|
|
|
|
if (livelli_giacenza().enabled())
|
1998-11-04 18:04:26 +00:00
|
|
|
|
{
|
1999-10-22 10:00:18 +00:00
|
|
|
|
livelli_giacenza().pack_maskgrpcodes(codliv,maskrighe,F_LIV1,4);
|
1998-11-04 18:04:26 +00:00
|
|
|
|
codliv.rtrim();
|
|
|
|
|
}
|
2006-12-13 16:22:33 +00:00
|
|
|
|
TString8 codmag(maskrighe.get(F_CODMAG));
|
1998-11-04 18:04:26 +00:00
|
|
|
|
codmag.insert(maskrighe.get(F_CODDEP),3);
|
2003-04-22 14:30:52 +00:00
|
|
|
|
|
|
|
|
|
const TString& um = maskrighe.get(F_UM);
|
|
|
|
|
if (um.not_empty())
|
|
|
|
|
{
|
2008-10-07 00:50:22 +00:00
|
|
|
|
TArticolo_giacenza & art = cached_article_balances(maskrighe.get(F_CODART));
|
2003-04-22 14:30:52 +00:00
|
|
|
|
real disp = art.disponibilita(maskmov.get(F_ANNOES),codmag,codliv,TRUE);
|
2008-10-07 00:50:22 +00:00
|
|
|
|
|
|
|
|
|
disp = art.convert_to_um(disp, um, NULL, false);
|
2003-04-22 14:30:52 +00:00
|
|
|
|
f.set(disp.string());
|
|
|
|
|
}
|
1998-11-04 18:04:26 +00:00
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
1998-08-25 18:07:30 +00:00
|
|
|
|
bool TMask_movmag::update_rigamov (int r, const char * old_codcaus, const char * old_codart, const real & old_quant)
|
|
|
|
|
{
|
|
|
|
|
bool added_some=add_autorows(r, old_codcaus, old_codart, old_quant);
|
|
|
|
|
if (added_some)
|
|
|
|
|
add_explrows(r+1);
|
|
|
|
|
added_some |=add_explrows(r);
|
|
|
|
|
return added_some;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TMask_movmag::add_autorows (int r, const char * old_codcaus, const char * old_codart, const real & old_quant)
|
1997-06-12 15:30:01 +00:00
|
|
|
|
{
|
1998-08-25 18:07:30 +00:00
|
|
|
|
bool added_some=FALSE;
|
1997-06-18 08:58:52 +00:00
|
|
|
|
TSheet_field & ss=(TSheet_field & )field(F_RIGHE);
|
1998-08-25 18:07:30 +00:00
|
|
|
|
real new_factor(ss.cell(r,ss.cid2index(F_QUANT)));
|
|
|
|
|
new_factor = old_quant.is_zero() ? ZERO : new_factor / old_quant;
|
2006-12-13 16:22:33 +00:00
|
|
|
|
TString8 new_codcaus(ss.cell(r,ss.cid2index(F_CAUSRIG)));
|
1997-06-18 08:58:52 +00:00
|
|
|
|
if (new_codcaus.blank())
|
|
|
|
|
new_codcaus=get(F_CODCAUS);
|
1998-08-25 18:07:30 +00:00
|
|
|
|
|
2006-12-13 16:22:33 +00:00
|
|
|
|
const TCausale_magazzino oldcau(old_codcaus);
|
|
|
|
|
const TCausale_magazzino cau(new_codcaus);
|
1998-08-25 18:07:30 +00:00
|
|
|
|
bool rimuovi_righe_coll=FALSE;
|
1999-10-22 10:00:18 +00:00
|
|
|
|
bool inserisci_righe_coll= *cau.caus_collegata()!='\0' && *ss.cell(r,ss.cid2index(F_ESPLOSA)) == ' ';
|
1998-08-25 18:07:30 +00:00
|
|
|
|
if (inserisci_righe_coll)
|
1997-06-18 08:58:52 +00:00
|
|
|
|
{
|
1998-08-25 18:07:30 +00:00
|
|
|
|
// *******************************
|
1997-06-18 08:58:52 +00:00
|
|
|
|
// deve esserci una riga collegata
|
2006-12-13 16:22:33 +00:00
|
|
|
|
const TCausale_magazzino cau_coll(cau.caus_collegata());
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
|
|
|
|
if (old_codcaus != new_codcaus)
|
|
|
|
|
{
|
|
|
|
|
rimuovi_righe_coll = TRUE;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
if ((r < ss.items()-1 && *ss.cell(r+1,ss.cid2index( F_AUTOMATICA)) == riga_automatica)
|
|
|
|
|
&& cau_coll.esplodente())
|
1998-11-04 18:04:26 +00:00
|
|
|
|
{
|
1999-10-22 10:00:18 +00:00
|
|
|
|
if (strcmp(old_codart,ss.cell(r,ss.cid2index( F_CODART)))!=0 )
|
|
|
|
|
// ho cambiato il codice articolo del finito: rimuovo le righe automatiche esplose
|
|
|
|
|
rimuovi_righe_coll = TRUE;
|
|
|
|
|
else
|
|
|
|
|
inserisci_righe_coll=FALSE;
|
1998-11-04 18:04:26 +00:00
|
|
|
|
}
|
1998-08-25 18:07:30 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
if (*oldcau.caus_collegata()!='\0') // ho cambiato causale, passando ad una che non ha collegamenti
|
|
|
|
|
rimuovi_righe_coll=TRUE;
|
|
|
|
|
// ******************
|
|
|
|
|
if (rimuovi_righe_coll)
|
|
|
|
|
{
|
|
|
|
|
while (r < ss.items()-1
|
|
|
|
|
&& *ss.cell(r+1,ss.cid2index( F_AUTOMATICA)) == riga_automatica)
|
|
|
|
|
ss.destroy(r + 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ******************
|
|
|
|
|
if (inserisci_righe_coll)
|
|
|
|
|
{
|
2006-12-13 16:22:33 +00:00
|
|
|
|
const TCausale_magazzino cau_coll(cau.caus_collegata());
|
|
|
|
|
TString8 mag, dep;
|
1999-04-06 15:34:39 +00:00
|
|
|
|
mag = cau_coll.default_mag();
|
|
|
|
|
dep = cau_coll.default_dep();
|
1998-08-25 18:07:30 +00:00
|
|
|
|
TString tmpstr;
|
|
|
|
|
int offset=1;
|
|
|
|
|
#define COPIA_SU_AUTO(colnum) {tmpstr=(ss.row(r).get(ss.cid2index(colnum))); ss.row(r+offset).add(tmpstr,ss.cid2index(colnum));}
|
|
|
|
|
if ((r == ss.items()-1 || r < ss.items()-1 && *ss.cell(r+1,ss.cid2index( F_AUTOMATICA)) != riga_automatica))
|
1997-06-18 08:58:52 +00:00
|
|
|
|
{
|
|
|
|
|
// manca, la inserisco
|
1998-08-25 18:07:30 +00:00
|
|
|
|
ss.insert(r+offset);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
TToken_string & newrow = ss.row(r+offset);
|
|
|
|
|
newrow = ss.row(r);
|
|
|
|
|
newrow.add(TString(1,riga_automatica),ss.cid2index(F_AUTOMATICA));
|
1998-08-25 18:07:30 +00:00
|
|
|
|
if (cau_coll.has_default_mag())
|
1999-10-22 10:00:18 +00:00
|
|
|
|
newrow.add(mag,ss.cid2index(F_CODMAG));
|
1998-08-25 18:07:30 +00:00
|
|
|
|
if (cau_coll.has_default_dep())
|
1999-10-22 10:00:18 +00:00
|
|
|
|
newrow.add(dep,ss.cid2index(F_CODDEP));
|
1998-08-25 18:07:30 +00:00
|
|
|
|
COPIA_SU_AUTO(F_PREZZO);
|
|
|
|
|
added_some= TRUE;
|
|
|
|
|
}
|
|
|
|
|
while (r+offset < ss.items() && *ss.cell(r+offset,ss.cid2index( F_AUTOMATICA))==riga_automatica)
|
|
|
|
|
{
|
|
|
|
|
// riporta eventuali cambiamenti della riga "Master" sulle righe automatice
|
|
|
|
|
if (*ss.cell(r+offset,ss.cid2index( F_ESPLOSA)) <=' ')
|
|
|
|
|
{
|
|
|
|
|
COPIA_SU_AUTO(F_CODART);
|
|
|
|
|
COPIA_SU_AUTO(F_LIV1);
|
|
|
|
|
COPIA_SU_AUTO(F_LIV2);
|
|
|
|
|
COPIA_SU_AUTO(F_LIV3);
|
|
|
|
|
COPIA_SU_AUTO(F_LIV4);
|
|
|
|
|
COPIA_SU_AUTO(F_UM);
|
|
|
|
|
COPIA_SU_AUTO(F_QUANT);
|
|
|
|
|
ss.row(r+offset).add(cau.caus_collegata(),ss.cid2index(F_CAUSRIG));
|
|
|
|
|
ss.check_row(r+offset);
|
|
|
|
|
ss.force_update(r+offset);
|
|
|
|
|
} else {
|
|
|
|
|
if (new_factor != 1.0)
|
|
|
|
|
{
|
|
|
|
|
real q(ss.row(r+offset).get(ss.cid2index(F_QUANT)));
|
|
|
|
|
q*=new_factor;
|
|
|
|
|
tmpstr=q.string();
|
|
|
|
|
ss.row(r+offset).add(tmpstr,ss.cid2index(F_QUANT));
|
|
|
|
|
ss.force_update(r+offset);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
offset++;
|
1997-06-18 08:58:52 +00:00
|
|
|
|
}
|
1998-08-25 18:07:30 +00:00
|
|
|
|
}
|
|
|
|
|
return added_some;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TMask_movmag::add_explrows(int r)
|
|
|
|
|
{
|
2006-12-13 16:22:33 +00:00
|
|
|
|
TSheet_field& sheet = sfield(F_RIGHE);
|
|
|
|
|
TString8 new_codcaus(sheet.cell(r,sheet.cid2index(F_CAUSRIG)));
|
1998-08-25 18:07:30 +00:00
|
|
|
|
if (new_codcaus.blank())
|
|
|
|
|
new_codcaus=get(F_CODCAUS);
|
|
|
|
|
|
|
|
|
|
bool added_some=FALSE;
|
|
|
|
|
|
2006-12-13 16:22:33 +00:00
|
|
|
|
const TCausale_magazzino cau(new_codcaus);
|
1999-04-06 15:34:39 +00:00
|
|
|
|
TArticolo articolo;
|
|
|
|
|
|
1998-08-25 18:07:30 +00:00
|
|
|
|
if (cau.esplodente() && *sheet.cell(r,sheet.cid2index(F_ESPLOSA)) == ' ')
|
|
|
|
|
{
|
|
|
|
|
TDistinta_tree distinta;
|
2001-05-02 13:40:49 +00:00
|
|
|
|
TArticolo articolo;
|
1998-08-25 18:07:30 +00:00
|
|
|
|
TArray boom;
|
|
|
|
|
// *******************************
|
|
|
|
|
// c'e' una riga di movimento esplodente non ancora esplosa:
|
|
|
|
|
// va sostituita con n righe esplose
|
1999-04-06 15:34:39 +00:00
|
|
|
|
real prezzo,quant;
|
|
|
|
|
const char tipo_costo = cau.get("S11")[0];
|
|
|
|
|
const int livello = cau.get_int("I0");
|
1999-10-22 10:00:18 +00:00
|
|
|
|
const TString codart = sheet.cell(r,sheet.cid2index(F_CODART));
|
|
|
|
|
bool ok = distinta.set_root(codart);
|
2001-05-02 13:40:49 +00:00
|
|
|
|
const int rigaprec = r - 1;
|
|
|
|
|
const bool is_coll = rigaprec >= 0 && *sheet.cell(r, sheet.cid2index(F_AUTOMATICA)) == riga_automatica;
|
1999-10-22 10:00:18 +00:00
|
|
|
|
if (ok)
|
1997-06-18 08:58:52 +00:00
|
|
|
|
{
|
1999-10-22 10:00:18 +00:00
|
|
|
|
distinta.explode(boom, TRUE, RAGGR_EXP_NONE, livello, "A");
|
|
|
|
|
for (int newrow=0; newrow < boom.items() ; newrow++)
|
1998-08-25 18:07:30 +00:00
|
|
|
|
{
|
1999-10-22 10:00:18 +00:00
|
|
|
|
TRiga_esplosione & riga_esp=(TRiga_esplosione & )(boom[newrow]);
|
|
|
|
|
sheet.insert(r+newrow+1);
|
|
|
|
|
TToken_string & nuova_riga=sheet.row(r+newrow+1);
|
|
|
|
|
nuova_riga=sheet.row(r);
|
|
|
|
|
nuova_riga.add(riga_esp.articolo() ,sheet.cid2index(F_CODART));
|
|
|
|
|
nuova_riga.add(riga_esp.um() , sheet.cid2index(F_UM));
|
|
|
|
|
quant=sheet.row(r).get(sheet.cid2index(F_QUANT));
|
|
|
|
|
quant*=riga_esp.val();
|
|
|
|
|
nuova_riga.add(quant.string() , sheet.cid2index(F_QUANT));
|
2001-05-02 13:40:49 +00:00
|
|
|
|
|
|
|
|
|
articolo.read(riga_esp.articolo());
|
|
|
|
|
char coll_type = articolo.get_char(ANAMAG_COLLTYPE);
|
|
|
|
|
TString16 codmag;
|
|
|
|
|
|
|
|
|
|
if (coll_type == 'M')
|
|
|
|
|
{
|
|
|
|
|
if (is_coll)
|
|
|
|
|
codmag = *sheet.cell(rigaprec, sheet.cid2index(F_CODMAG));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
if (coll_type == 'F')
|
|
|
|
|
{
|
|
|
|
|
TString key("F|");
|
|
|
|
|
|
|
|
|
|
key << articolo.get(ANAMAG_CODFORN);
|
|
|
|
|
codmag = cache().get(LF_CFVEN, key, CFV_CODMAG);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
if (coll_type == 'A')
|
|
|
|
|
codmag = articolo.get(ANAMAG_CODMAG);
|
|
|
|
|
if (codmag.not_empty())
|
|
|
|
|
{
|
2006-12-13 16:22:33 +00:00
|
|
|
|
const TString8 mag(codmag.left(3));
|
|
|
|
|
const TString8 dep(codmag.mid(3));
|
2001-05-02 13:40:49 +00:00
|
|
|
|
|
|
|
|
|
nuova_riga.add(mag ,sheet.cid2index(F_CODMAG));
|
|
|
|
|
nuova_riga.add(dep ,sheet.cid2index(F_CODDEP));
|
1999-10-22 10:00:18 +00:00
|
|
|
|
}
|
|
|
|
|
articolo.read(riga_esp.articolo());
|
|
|
|
|
if (tipo_costo == 'U')
|
|
|
|
|
prezzo = articolo.get_real(ANAMAG_ULTCOS1);
|
|
|
|
|
else
|
|
|
|
|
if (tipo_costo == 'S')
|
|
|
|
|
prezzo = articolo.get_real(ANAMAG_COSTSTD);
|
|
|
|
|
if (!prezzo.is_zero())
|
|
|
|
|
nuova_riga.add(prezzo.string(),sheet.cid2index(F_PREZZO));
|
|
|
|
|
nuova_riga.add("X",sheet.cid2index(F_ESPLOSA));
|
|
|
|
|
|
|
|
|
|
sheet.check_row(r+1+newrow);
|
|
|
|
|
sheet.force_update(r+1+newrow);
|
|
|
|
|
added_some=TRUE;
|
|
|
|
|
}
|
|
|
|
|
// elimino la riga "padre"
|
|
|
|
|
if (boom.items() > 0)
|
|
|
|
|
{
|
|
|
|
|
if (boom.items() == 1 && codart == ((TRiga_esplosione &)boom[0]).articolo())
|
2004-05-18 10:44:57 +00:00
|
|
|
|
error_box(TR("Distinta %s ciclica"), (const char *)codart);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
sheet.destroy(r);
|
1998-08-25 18:07:30 +00:00
|
|
|
|
}
|
1999-04-06 15:34:39 +00:00
|
|
|
|
else
|
2004-05-18 10:44:57 +00:00
|
|
|
|
message_box(FR("Impossibile esplodere l'articolo %s"), (const char *)codart);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
|
|
|
|
|
1997-06-18 08:58:52 +00:00
|
|
|
|
}
|
1998-08-25 18:07:30 +00:00
|
|
|
|
}
|
|
|
|
|
return added_some;
|
1997-06-12 15:30:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
1997-07-28 10:32:58 +00:00
|
|
|
|
real TMask_movmag::proposed_price(const char *codart,
|
|
|
|
|
real quant, const char *causrig)
|
2000-05-05 15:25:49 +00:00
|
|
|
|
{
|
|
|
|
|
real rv;
|
2005-02-17 18:13:12 +00:00
|
|
|
|
|
|
|
|
|
const TCausale_magazzino cau(causrig && *causrig ? causrig : (const char *)get(F_CODCAUS));
|
|
|
|
|
const char tipoprz = cau.tipoprz();
|
|
|
|
|
|
|
|
|
|
if (tipoprz == 'P' || tipoprz == 'C') // Se e' Libero non devo far nulla
|
2000-05-05 15:25:49 +00:00
|
|
|
|
{
|
2005-02-17 18:13:12 +00:00
|
|
|
|
TLocalisamfile anamag(LF_ANAMAG);
|
|
|
|
|
anamag.put("CODART",codart);
|
|
|
|
|
anamag.read();
|
|
|
|
|
|
|
|
|
|
TConfig cfgditta(CONFIG_DITTA);
|
|
|
|
|
TLocalisamfile umart(LF_UMART);
|
|
|
|
|
|
|
|
|
|
TCondizione_vendita cv(&cfgditta,&anamag,&umart);
|
|
|
|
|
cv.put_listino(get(F_CODLIST),get(F_CATVEN));
|
|
|
|
|
|
|
|
|
|
switch (tipoprz)
|
|
|
|
|
{
|
1997-06-18 08:58:52 +00:00
|
|
|
|
// prezzo
|
2000-05-05 15:25:49 +00:00
|
|
|
|
case 'P':
|
2005-02-17 18:13:12 +00:00
|
|
|
|
cv.ricerca(codart,quant,false); // Considera UMART
|
1997-06-18 08:58:52 +00:00
|
|
|
|
rv=cv.get_prezzo();
|
2005-02-17 18:13:12 +00:00
|
|
|
|
break;
|
|
|
|
|
// costo
|
2000-05-05 15:25:49 +00:00
|
|
|
|
case 'C':
|
2005-02-17 18:13:12 +00:00
|
|
|
|
cv.ricerca(codart,quant,true); // Ignora UMART
|
|
|
|
|
rv=cv.get_prezzo();
|
|
|
|
|
if (rv.is_zero())
|
|
|
|
|
rv=anamag.get_real("ULTCOS1");
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
1997-06-18 08:58:52 +00:00
|
|
|
|
}
|
2005-02-17 18:13:12 +00:00
|
|
|
|
|
1997-06-18 08:58:52 +00:00
|
|
|
|
return rv;
|
1997-02-28 11:56:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
1997-05-23 15:01:37 +00:00
|
|
|
|
bool TMask_movmag::handle_codcaus(TMask_field &fld, KEY k)
|
1997-02-28 11:56:16 +00:00
|
|
|
|
{
|
2006-12-13 16:22:33 +00:00
|
|
|
|
static TString8 old_codcaus;
|
1997-06-18 08:58:52 +00:00
|
|
|
|
|
1997-07-28 10:32:58 +00:00
|
|
|
|
if (k == K_TAB && fld.focusdirty() && old_codcaus!="")
|
|
|
|
|
{
|
1997-06-18 08:58:52 +00:00
|
|
|
|
// aggiorna le righe di sheet
|
|
|
|
|
TMask_movmag &m=(TMask_movmag &)fld.mask();
|
|
|
|
|
TSheet_field & ss=(TSheet_field & )m.field(F_RIGHE);
|
2004-03-16 07:43:45 +00:00
|
|
|
|
bool added_some = FALSE;
|
1997-06-18 08:58:52 +00:00
|
|
|
|
|
1997-07-07 10:55:47 +00:00
|
|
|
|
// aggiorna le righe che dipendono dalla causale movimento
|
1997-06-18 08:58:52 +00:00
|
|
|
|
for (int i=0; i< ss.items(); i++)
|
|
|
|
|
{
|
|
|
|
|
if (*ss.cell(i,ss.cid2index(F_CAUSRIG)) ==' ')
|
1998-08-25 18:07:30 +00:00
|
|
|
|
added_some &=(m.update_rigamov(i,old_codcaus,ss.cell(i,ss.cid2index(F_CODART)), real(ss.cell(i,ss.cid2index(F_QUANT)))));
|
1997-06-18 08:58:52 +00:00
|
|
|
|
}
|
|
|
|
|
if (added_some)
|
|
|
|
|
{
|
|
|
|
|
ss.dirty();
|
|
|
|
|
ss.set_focus();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (k == K_TAB)
|
|
|
|
|
old_codcaus=fld.get();
|
1997-02-28 11:56:16 +00:00
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1997-05-23 15:01:37 +00:00
|
|
|
|
bool TMask_movmag::handle_datacomp(TMask_field &fld, KEY k)
|
1997-02-28 11:56:16 +00:00
|
|
|
|
{
|
1997-07-23 15:47:36 +00:00
|
|
|
|
if (k == K_TAB) // && fld.focusdirty())
|
1999-06-18 15:35:05 +00:00
|
|
|
|
{
|
|
|
|
|
TMask_movmag& m = (TMask_movmag&) fld.mask();
|
2008-10-07 00:50:22 +00:00
|
|
|
|
const int codes = esercizi().date2esc(TDate(fld.get()));
|
2006-12-13 16:22:33 +00:00
|
|
|
|
if (codes > 0)
|
|
|
|
|
{
|
|
|
|
|
m.set(F_ANNOES, codes);
|
|
|
|
|
m.set(H_ANNOES, codes);
|
1999-05-24 13:34:11 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
2004-05-18 10:44:57 +00:00
|
|
|
|
return fld.error_box(TR("La data indicata non appartiene a nessuno degli esercizi contabili inseriti ")) ;
|
1997-06-18 08:58:52 +00:00
|
|
|
|
}
|
1997-02-28 11:56:16 +00:00
|
|
|
|
return TRUE;
|
1997-05-23 15:01:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
1998-08-25 18:07:30 +00:00
|
|
|
|
class TApp_movmag: public TRelation_application
|
|
|
|
|
{
|
1997-06-18 08:58:52 +00:00
|
|
|
|
TMask_movmag *_msk; // maschera principale
|
|
|
|
|
TRelation * _rel; // relazione contenente il file movimenti
|
|
|
|
|
|
1997-02-28 11:56:16 +00:00
|
|
|
|
virtual bool user_create();
|
|
|
|
|
virtual bool user_destroy();
|
|
|
|
|
virtual TMask *get_mask(int) { return _msk; }
|
1999-10-22 10:00:18 +00:00
|
|
|
|
virtual void init_query_mode(TMask&) ;
|
|
|
|
|
virtual void init_insert_mode(TMask&) ;
|
|
|
|
|
virtual void init_modify_mode(TMask&) ;
|
1997-02-28 11:56:16 +00:00
|
|
|
|
virtual bool changing_mask(int) { return FALSE; }
|
1997-05-23 15:01:37 +00:00
|
|
|
|
virtual TRelation *get_relation() const { return _rel; }
|
1997-06-18 08:58:52 +00:00
|
|
|
|
virtual const char *get_next_key();
|
2000-05-05 15:25:49 +00:00
|
|
|
|
virtual int read(TMask& m);
|
1997-06-18 08:58:52 +00:00
|
|
|
|
TString16 _nextcod;
|
1998-08-25 18:07:30 +00:00
|
|
|
|
|
1997-02-28 11:56:16 +00:00
|
|
|
|
public:
|
|
|
|
|
TApp_movmag() {};
|
|
|
|
|
virtual ~TApp_movmag() {};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inline TApp_movmag& app() { return (TApp_movmag&) main_app(); }
|
|
|
|
|
|
2000-05-05 15:25:49 +00:00
|
|
|
|
int TApp_movmag::read(TMask& m)
|
|
|
|
|
{
|
2006-04-13 17:56:02 +00:00
|
|
|
|
const int err = TRelation_application::read(m);
|
|
|
|
|
if (err == NOERR)
|
|
|
|
|
((TMask_movmag &)m).update_tot();
|
|
|
|
|
return err;
|
2000-05-05 15:25:49 +00:00
|
|
|
|
}
|
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
|
void TApp_movmag::init_query_mode(TMask& m)
|
|
|
|
|
{
|
2002-09-13 14:06:05 +00:00
|
|
|
|
m.enable(F_INVENTORYMODE);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
TRelation_application::init_query_mode(m);
|
|
|
|
|
}
|
2006-12-13 16:22:33 +00:00
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
|
void TApp_movmag::init_modify_mode(TMask& m)
|
|
|
|
|
{
|
|
|
|
|
m.disable(F_INVENTORYMODE);
|
2002-09-13 14:06:05 +00:00
|
|
|
|
const bool inventory = m.get_bool(F_INVENTORYMODE);
|
|
|
|
|
TSheet_field & ss = m.sfield(F_RIGHE);
|
|
|
|
|
ss.sheet_mask().field(F_QUANT).check_type(inventory ? CHECK_NONE : CHECK_REQUIRED);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
TRelation_application::init_modify_mode(m);
|
|
|
|
|
}
|
2006-12-13 16:22:33 +00:00
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
|
void TApp_movmag::init_insert_mode(TMask& m)
|
|
|
|
|
{
|
|
|
|
|
m.disable(F_INVENTORYMODE);
|
2002-09-13 14:06:05 +00:00
|
|
|
|
const bool inventory = m.get_bool(F_INVENTORYMODE);
|
2006-12-13 16:22:33 +00:00
|
|
|
|
TSheet_field& ss = m.sfield(F_RIGHE);
|
2002-09-13 14:06:05 +00:00
|
|
|
|
ss.sheet_mask().field(F_QUANT).check_type(inventory ? CHECK_NONE : CHECK_REQUIRED);
|
2006-12-13 16:22:33 +00:00
|
|
|
|
|
2007-11-27 13:00:40 +00:00
|
|
|
|
for (int i = 0; i < ((TMask_movmag &)m).autorows(); i++)
|
2006-12-13 16:22:33 +00:00
|
|
|
|
ss.insert(-1, false, true);
|
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
|
TRelation_application::init_insert_mode(m);
|
|
|
|
|
}
|
|
|
|
|
|
1997-02-28 11:56:16 +00:00
|
|
|
|
bool TApp_movmag::user_create()
|
|
|
|
|
{
|
2001-07-24 13:28:55 +00:00
|
|
|
|
open_files(LF_ANAMAG, LF_UMART, LF_CODCORR, LF_DESLIN, LF_MOVMAG,LF_RMOVMAG, LF_MAG, LF_STOMAG, LF_TABCOM,0);
|
1997-06-18 08:58:52 +00:00
|
|
|
|
|
1997-06-09 10:53:47 +00:00
|
|
|
|
TMov_mag * m_m= new TMov_mag(); // record del movimento di magazzino
|
1997-06-18 08:58:52 +00:00
|
|
|
|
m_m->enable_autoload(LF_RMOVMAG);
|
|
|
|
|
|
1997-05-23 15:01:37 +00:00
|
|
|
|
// maschera specifica con gli handler dei movimenti
|
2001-07-24 13:28:55 +00:00
|
|
|
|
_msk= new TMask_movmag(m_m);
|
1997-06-18 08:58:52 +00:00
|
|
|
|
// relazione con un solo file (LF_MOVMAG) ma col record Head_Body
|
1997-05-23 15:01:37 +00:00
|
|
|
|
_rel= new TRelation(LF_MOVMAG);
|
|
|
|
|
_rel->lfile().set_curr(m_m);
|
1997-06-18 08:58:52 +00:00
|
|
|
|
|
1997-02-28 11:56:16 +00:00
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TApp_movmag::user_destroy()
|
|
|
|
|
{
|
1997-06-18 08:58:52 +00:00
|
|
|
|
delete _rel;
|
1997-02-28 11:56:16 +00:00
|
|
|
|
delete _msk;
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// autonumerazione
|
|
|
|
|
const char *TApp_movmag::get_next_key()
|
|
|
|
|
{
|
1998-08-25 18:07:30 +00:00
|
|
|
|
const char* nk = ((TMov_mag &)_rel->curr()).get_next_key();
|
|
|
|
|
return _nextcod.format("%d|%s",F_NUMREG, nk);
|
1997-02-28 11:56:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int mg1100(int argc, char* argv[])
|
|
|
|
|
{
|
|
|
|
|
TApp_movmag a;
|
2004-05-18 10:44:57 +00:00
|
|
|
|
a.run(argc, argv, TR("Movimenti di magazzino"));
|
1998-08-25 18:07:30 +00:00
|
|
|
|
exit(0);
|
1997-02-28 11:56:16 +00:00
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|