Files correlati : batbtip.msk ve0.exe ve2.exe ve6.exe (tutti i profili standard) Ricompilazione Demo : [ ] Commento : GF20048 Ho inserito una riga merce nella quale oltre ad attribuire la commessa ho attribuito la fase solo che mi appare il codice di questa e non la descrizione, se sulla descrizione della fase clicco su nuovo mi appare il seguente messaggio d'errore:"Impossibile leggere il file batbfas.msk " GF20049 Se dalla gestione dei documenti cerco di contabilizzare una fattura intra quindi con la sputa nella causale contabile operazione intracomunitaria dà errore ve0 questo programma ha eseguito un'operazione non valida e sarà terminato GF20050 Cercando di contabilizzare delle fatture intra quindi con la sputa nella causale contabile operazione intracomunitaria dà errore ve6 questo programma ha eseguito un'operazione non valida e sarà terminato GF20051 Sto inserendo un documento con valuta blank quindi quella di conto solo che avendo attivato la gestione dei documenti in valuta mi dà il seguente messaggio:"il cambio è obbligatorio" GF20052 Nonostante cerchi di cambiare l'impostazione delle colonne quando entro nel movimento successivo l'impostazione è ritornata a prima della variazione GF20053 Lanciando la stampa la colonna standard intestata come TOTALE arrotonda gli importi all'intero git-svn-id: svn://10.65.10.50/trunk@11295 c028cbd2-c16b-5b4b-a496-9718f37d4682
1296 lines
38 KiB
C++
Executable File
1296 lines
38 KiB
C++
Executable File
#include <applicat.h>
|
|
#include <defmask.h>
|
|
#include <modaut.h>
|
|
#include <progind.h>
|
|
#include <sheet.h>
|
|
#include <tabutil.h>
|
|
|
|
#include "velib.h"
|
|
#include "vepriv.h"
|
|
|
|
#ifndef __VERIG_H
|
|
#include "verig.h"
|
|
#endif
|
|
|
|
#ifndef __VEUML1_H
|
|
#include "veuml1.h"
|
|
#endif
|
|
|
|
#ifndef __VEINI_H
|
|
#include "veini.h"
|
|
#endif
|
|
|
|
#ifndef __SCONTI_H
|
|
#include "sconti.h"
|
|
#endif
|
|
|
|
#include "../cg/cg2103.h"
|
|
|
|
#ifndef __MGLIB_H
|
|
#include "../mg/mglib.h"
|
|
#endif
|
|
|
|
#ifndef __DBLIB_H
|
|
#include "../db/dblib.h"
|
|
#endif
|
|
|
|
#include "../mg/anamag.h"
|
|
#include "../mg/codcorr.h"
|
|
#include "../mg/deslin.h"
|
|
#include "../mg/umart.h"
|
|
#include "velib.h"
|
|
|
|
#define MAX_VIS_RATE 5
|
|
|
|
bool numdocrif_hndl( TMask_field& field, KEY key )
|
|
{
|
|
if (key == K_ENTER)
|
|
{
|
|
TDocumento_mask& m = (TDocumento_mask&)field.mask();
|
|
TString16 campo = DOC_NUMDOCRIF;
|
|
if (field.field() != NULL)
|
|
campo = field.field()->name();
|
|
|
|
TRectype filtrec(LF_DOC);
|
|
filtrec.put(DOC_TIPOCF, m.get(F_TIPOCF));
|
|
filtrec.put(DOC_CODCF, m.get(F_CODCF));
|
|
filtrec.put(DOC_PROVV, m.get(F_PROVV));
|
|
filtrec.put(DOC_ANNO, m.get(F_ANNO));
|
|
|
|
TRelation rel(LF_DOC);
|
|
TString sortkey = "TIPOCF|CODCF|PROVV|ANNO|CODNUM|"; sortkey << campo;
|
|
TSorted_cursor cur(&rel, sortkey, "", 2, &filtrec, &filtrec);
|
|
TString80 f; f.format("CODNUM==\"%s\"", (const char*)m.get(F_CODNUM));
|
|
|
|
cur.setfilter(f);
|
|
|
|
filtrec.put(DOC_CODNUM, m.get(F_CODNUM));
|
|
filtrec.put(campo, field.get());
|
|
cur.curr() = filtrec;
|
|
cur.read(_isequal);
|
|
|
|
if (cur.file().status() == NOERR)
|
|
{
|
|
const long numdoc = m.get_long(F_NDOC);
|
|
if (numdoc != cur.curr().get_long(DOC_NDOC))
|
|
return yesno_box("Il numero di riferimento %s è già stato utilizzato\nsi desidera registrare ugualmente?",
|
|
(const char *)field.get());
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool totdoc_hndl( TMask_field& field, KEY key )
|
|
|
|
{
|
|
if (key == K_ENTER)
|
|
{
|
|
TDocumento_mask & m = (TDocumento_mask &) field.mask();
|
|
const real totdoc = m.doc().totale_doc();
|
|
const real totdoc_check(field.get());
|
|
|
|
|
|
if (totdoc != totdoc_check)
|
|
{
|
|
const TString16 tchk(totdoc_check.string());
|
|
|
|
return yesno_box("Il totale documento digitato (%s) non corrisponde\nal totale documento (%s) calcolato,\n devo registrare ugualmente",
|
|
(const char *) tchk, totdoc.string());
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool ora_hndl( TMask_field& field, KEY key )
|
|
|
|
{
|
|
if (field.to_check(key))
|
|
{
|
|
TFixed_string ora( field.get( ), 6 );
|
|
|
|
ora.trim( );
|
|
if (ora.not_empty() || field.required() )
|
|
{
|
|
if ( isdigit( ora[ 0 ] ) )
|
|
{
|
|
if ( ora[ 2 ] != ':')
|
|
{
|
|
if ( ora.len( ) > 4 )
|
|
ora.overwrite( ":", 2 );
|
|
else
|
|
ora.insert( ":", 2 );
|
|
}
|
|
}
|
|
const bool ok = ((isdigit(ora[0]))&&(isdigit(ora[1]))&&(isdigit(ora[3]))&&(isdigit(ora[4]))) &&
|
|
((atoi(&(ora[0]))<24)&&(atoi(&(ora[3]))<60));
|
|
if (ok )
|
|
field.set((ora));
|
|
else
|
|
return error_box("Ora errata o formato non valido");
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool dummy_hndl(TMask_field& field, KEY key)
|
|
{
|
|
warning_box( "Al campo %d è arrivato un KEY %d", field.dlg( ), key );
|
|
return TRUE;
|
|
}
|
|
|
|
// Handler per il calcolo delle date di pagamento
|
|
bool condpag_hndl( TMask_field& field, KEY key )
|
|
{
|
|
TDocumento_mask& m = (TDocumento_mask &) field.mask( );
|
|
|
|
if ( field.to_check(key) || (key == K_TAB && !m.is_running()))
|
|
{
|
|
const TString& condpag = m.get(F_CODPAG);
|
|
if (condpag.not_empty())
|
|
{
|
|
TDocumento& doc = m.doc();
|
|
// Aggiorna dati necessari per determinare il pagamento
|
|
doc.put(DOC_CODPAG, condpag);
|
|
doc.put(DOC_DATADOC, m.get(F_DATADOC));
|
|
doc.put(DOC_DATAINSC, m.get(F_DATAINSC));
|
|
doc.put(DOC_TIPOCF, m.get(F_TIPOCF));
|
|
doc.put(DOC_CODCF, m.get(F_CODCF));
|
|
TPagamento& pag = doc.pagamento();
|
|
pag.set_total(real(100), real(10), real(10));
|
|
pag.set_rate_auto();
|
|
|
|
int numrate = pag.n_rate( );
|
|
for(int i = 0; i < MAX_VIS_RATE; i++)
|
|
{
|
|
if (i < numrate)
|
|
{
|
|
m.show(F_DATASCAD1+i);
|
|
m.set(F_DATASCAD1+i, pag.data_rata(i));
|
|
}
|
|
else
|
|
m.hide(F_DATASCAD1+i);
|
|
}
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool note_hndl( TMask_field& f, KEY key )
|
|
{
|
|
TDocumento_mask & m = (TDocumento_mask &) f.mask();
|
|
|
|
if (key == K_TAB && (f.focusdirty() || !m.is_running()))
|
|
{
|
|
TTable & note = (TTable &) ((TEdit_field &) f).browse()->cursor()->file();
|
|
note.setkey(1);
|
|
const TString16 cod(f.get());
|
|
|
|
if (cod != note.get("CODTAB"))
|
|
{
|
|
note.zero();
|
|
note.put("CODTAB", cod);
|
|
if (note.read() != NOERR)
|
|
note.zero();
|
|
}
|
|
if (m.doc().modificabile() && m.field(DLG_SAVEREC).enabled())
|
|
{
|
|
const bool reg_disabled = note.get_bool("B0");
|
|
|
|
if (reg_disabled)
|
|
message_box("Registrazione disabilitata : %s", (const char *) note.get("S0"));
|
|
m.enable(DLG_SAVEREC, !reg_disabled);
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
// Handler per il calcolo delle date di pagamento
|
|
bool data_hndl( TMask_field& field, KEY key )
|
|
{
|
|
TDocumento_mask& m = (TDocumento_mask &) field.mask( );
|
|
if (field.to_check(key))
|
|
{
|
|
if (m.id2pos(F_DATAINSC) >= 0)
|
|
{
|
|
TEdit_field & e = m.efield(F_DATAINSC);
|
|
e.set_dirty();
|
|
e.on_hit();
|
|
}
|
|
|
|
if (m.id2pos(F_DATACAMBIO1) >= 0 && !m.get(F_CODVAL).empty())
|
|
m.set(F_DATACAMBIO1, field.get(), TRUE);
|
|
}
|
|
if (key == K_ENTER || field.to_check(key))
|
|
{
|
|
const TDate datadoc(m.get(F_DATADOC));
|
|
if (!datadoc.ok())
|
|
return field.error_box("La data documento deve essere comunque indicata.");
|
|
|
|
TEsercizi_contabili esc;
|
|
if (esc.date2esc(datadoc) <= 0)
|
|
return field.error_box("La data documento non appartiene ad un esercizio valido.");
|
|
if (main_app().has_module(CGAUT))
|
|
{
|
|
const TTipo_documento& td = m.doc().tipo();
|
|
TString16 codcaus = td.causale();
|
|
if (codcaus.empty())
|
|
{
|
|
const TRectype& clifo = m.doc().clifor().vendite();
|
|
codcaus = clifo.get("CODCAUS");
|
|
}
|
|
if (codcaus.not_empty())
|
|
{
|
|
const int year = datadoc.year();
|
|
TCausale caus;
|
|
if (!caus.read(codcaus, year))
|
|
return FALSE; // L'errore viene segnalato nella read
|
|
}
|
|
}
|
|
|
|
const TCodice_numerazione codnum(m.get(F_CODNUM));
|
|
if (codnum.dont_test_datadoc())
|
|
return TRUE; // Non devo fare altri test
|
|
|
|
TLocalisamfile doc(LF_DOC);
|
|
|
|
doc.curr() = m.doc().head();
|
|
bool same_key = FALSE;
|
|
|
|
doc.read(_isgteq);
|
|
if (doc.eof() || doc.prev() == NOERR)
|
|
{
|
|
TDate dataprev = doc.get_date(DOC_DATADOC);
|
|
|
|
same_key = doc.curr().same_key(m.doc().head(), 1, 1);
|
|
if (same_key && datadoc < dataprev)
|
|
return field.error_box("Data documento inferiore alla data del documento precedente");
|
|
}
|
|
|
|
doc.curr() = m.doc().head();
|
|
doc.read(_isgreat);
|
|
same_key = doc.curr().same_key(m.doc().head(), 1, 1);
|
|
if (doc.good() && same_key && datadoc > doc.get_date(DOC_DATADOC))
|
|
return field.error_box("Data documento superiore alla data del documento successivo");
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
// handler delle righe
|
|
|
|
void row_set_handler( TMask& m, const int field, const int index )
|
|
{
|
|
switch ( index )
|
|
{
|
|
case 1:
|
|
m.set_handler( field, pricerange_handler);
|
|
break;
|
|
case 2:
|
|
m.set_handler( field, dummy_hndl );
|
|
break;
|
|
default:
|
|
yesnofatal_box( FALSE, "Funzione di handler sulla riga non definita( %d ).", index );
|
|
}
|
|
}
|
|
|
|
HIDDEN TString16 curr_um;
|
|
HIDDEN real curr_fc(1.0);
|
|
|
|
bool iva_handler( TMask_field& f, KEY key )
|
|
{
|
|
TDocumento_mask & mask = (TDocumento_mask &) f.mask().get_sheet()->mask();
|
|
|
|
if (key == 0 || (key == K_ENTER && f.get().empty()))
|
|
{
|
|
const TString16 codiva = mask.condv().clifo().vendite().get(CFV_ASSFIS);
|
|
if (codiva.not_empty())
|
|
f.set(codiva);
|
|
f.check();
|
|
}
|
|
|
|
if (key == K_ENTER && /*f.focusdirty() &&*/ f.get().empty())
|
|
{
|
|
TMask & row_mask = f.mask();
|
|
const int r = f.mask().get_sheet()->selected() + 1;
|
|
TRiga_documento& riga = mask.doc()[r];
|
|
|
|
const int pos_ai = row_mask.id2pos(FR_ADDIVA);
|
|
bool addiva = FALSE;
|
|
|
|
if (pos_ai >= 0)
|
|
addiva = row_mask.fld(pos_ai).get() == "X"; // Controlla le righe Omaggio solo se e' settato l'addebito IVA
|
|
|
|
const bool check = riga.is_merce() || riga.is_spese() || riga.is_prestazione() ||
|
|
(riga.is_omaggio() && addiva);
|
|
|
|
if (check)
|
|
{
|
|
const int pos_p = row_mask.id2pos(FR_PREZZO);
|
|
const int pos_q = row_mask.id2pos(FR_QTA);
|
|
const bool pe = pos_p >= 0 && row_mask.fld(pos_p).enabled();
|
|
const bool qe = pos_q >= 0 && row_mask.fld(pos_q).enabled();
|
|
const bool pf = pe && row_mask.fld(pos_p).get().not_empty();
|
|
const bool qf = qe && row_mask.fld(pos_q).get().not_empty();
|
|
const bool required = pf && !(qe && !qf);
|
|
if (required)
|
|
return f.error_box("Il codice IVA e' obbligatorio.");
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool codmag_handler( TMask_field& f, KEY key )
|
|
{
|
|
// if (f.to_check(key, TRUE))
|
|
if (key == K_TAB && f.focusdirty())
|
|
{
|
|
TMask& row_mask = f.mask();
|
|
TSheet_field& sf = *row_mask.get_sheet();
|
|
TDocumento_mask& docmask = (TDocumento_mask&)sf.mask();
|
|
|
|
if (sf.column_enabled(sf.cid2index(FR_CODDEP)))
|
|
{
|
|
const int pos = row_mask.id2pos(FR_CODDEP);
|
|
const TString & val = f.get();
|
|
|
|
if (pos >= 0 && val.not_empty())
|
|
{
|
|
const TRectype& mag = cache().get("MAG", val);
|
|
const bool active = mag.get_bool("B0");
|
|
row_mask.fld(pos).enable(active);
|
|
if (!active)
|
|
row_mask.fld(pos).reset();
|
|
}
|
|
}
|
|
|
|
if (f.get().empty() && docmask.doc().tipo().mov_mag())
|
|
return f.error_box("Indicare il magazzino.");
|
|
|
|
docmask.update_giacenza();
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool codmag_coll_handler( TMask_field& f, KEY key )
|
|
{
|
|
if (key == K_TAB && f.focusdirty())
|
|
{
|
|
TMask& row_mask = f.mask();
|
|
TSheet_field& sf = *row_mask.get_sheet();
|
|
|
|
if (sf.column_enabled( ((TSheet_field &)f).cid2index(FR_CODDEPC)))
|
|
{
|
|
const int pos = row_mask.id2pos(FR_CODDEPC);
|
|
const TString & val = f.get();
|
|
|
|
if (pos >= 0 && val.not_empty())
|
|
{
|
|
const TRectype& mag = cache().get("MAG", val);
|
|
const bool active = mag.get_bool("B0");
|
|
row_mask.fld(pos).enable(active);
|
|
if (!active)
|
|
row_mask.fld(pos).reset();
|
|
}
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void upd_colli_peso_tara(TMask & m, TRectype & a)
|
|
{
|
|
const real qta = m.get_real(FR_QTA) * curr_fc;
|
|
const real ppcollo = a.get_real(ANAMAG_PPCOLLO);
|
|
|
|
real ncolli = ppcollo != ZERO ? qta / ppcollo : (real)1.0;
|
|
ncolli.ceil(0);
|
|
|
|
int pos = m.id2pos(FR_NCOLLI);
|
|
if (pos >= 0)
|
|
if (ppcollo != ZERO)
|
|
m.fld(pos).set(ncolli.string());
|
|
else
|
|
m.fld(pos).reset();
|
|
|
|
pos = m.id2pos(FR_TARA);
|
|
if (pos >= 0)
|
|
{
|
|
const real tara = ncolli * a.get_real(ANAMAG_TARA);
|
|
m.fld(pos).set(tara.string());
|
|
}
|
|
pos = m.id2pos(FR_PNETTO);
|
|
if (pos >= 0)
|
|
{
|
|
const real peso = qta * a.get_real(ANAMAG_PESO);
|
|
m.fld(pos).set(peso.string());
|
|
}
|
|
}
|
|
|
|
|
|
bool pricerange_handler(TMask_field& f, KEY key )
|
|
{
|
|
if (key == K_TAB && f.focusdirty())
|
|
{
|
|
TMask& row_mask = f.mask();
|
|
TDocumento_mask& mask = (TDocumento_mask &) row_mask.get_sheet()->mask();
|
|
|
|
if (mask.doc().tipo().controllo_prezzi())
|
|
{
|
|
TSheet_field& sh = (TSheet_field &)mask.field(F_SHEET);
|
|
const int current_doc_row = sh.selected() + 1;
|
|
TRiga_documento & riga = mask.doc()[current_doc_row];
|
|
const real old_price = riga.get_real(RDOC_PREZZO);
|
|
const real new_price = row_mask.get(FR_PREZZO);
|
|
|
|
if (old_price != ZERO)
|
|
{
|
|
const TTipo_riga_documento& tipo_riga = riga.tipo();
|
|
const int incr = tipo_riga.incr_perc_prezzo();
|
|
const int decr = tipo_riga.decr_perc_prezzo();
|
|
|
|
if (incr == 0 && decr == 0)
|
|
{
|
|
if (old_price != new_price && !yesno_box("Il prezzo è variato, confermare"))
|
|
return FALSE;
|
|
}
|
|
else
|
|
{
|
|
real inf = old_price * (1.00 - (decr/100.0));
|
|
if (inf > new_price && !yesno_box("Il prezzo è diminuito di più del %d%%, confermare", decr))
|
|
return FALSE;
|
|
real sup = old_price * (1.00 + (incr/100.0));
|
|
if (sup < new_price && !yesno_box("Il prezzo è aumentato di più del %d%%, confermare", incr))
|
|
return FALSE;
|
|
}
|
|
}
|
|
riga.put(RDOC_PREZZO, new_price);
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
bool codart_handler(TMask_field& f, KEY key )
|
|
{
|
|
TMask& row_mask = f.mask();
|
|
TDocumento_mask& mask = (TDocumento_mask &) row_mask.get_sheet()->mask();
|
|
TSheet_field& sh = (TSheet_field &)mask.field(F_SHEET);
|
|
const int current_doc_row = sh.selected() + 1;
|
|
|
|
if (f.to_check(key, TRUE))
|
|
{
|
|
if (!f.empty())
|
|
row_mask.enable(FR_LIV1);
|
|
else
|
|
{
|
|
row_mask.reset(FR_LIV1);
|
|
row_mask.disable(FR_LIV1);
|
|
}
|
|
row_mask.field(FR_LIV1).on_hit();
|
|
}
|
|
|
|
if (key == K_TAB && (f.focusdirty() || row_mask.get(FR_CHECKED).empty()))
|
|
{
|
|
TCond_vendita & condv = mask.condv();
|
|
|
|
condv.set_testa(&mask);
|
|
condv.set_riga(&row_mask);
|
|
|
|
TString80 codart = f.get();
|
|
TRectype anamag = cache().get(LF_ANAMAG, codart); // anamag puo' cambiare
|
|
bool found = !anamag.empty();
|
|
|
|
if (found)
|
|
row_mask.set(FR_CODARTMAG, codart, TRUE);
|
|
else
|
|
{
|
|
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);
|
|
found = !anamag.empty();
|
|
if (found)
|
|
row_mask.set(FR_CODARTMAG, codart, TRUE);
|
|
}
|
|
}
|
|
row_mask.set(FR_CHECKED, "X");
|
|
if (!found)
|
|
row_mask.set(FR_CODARTMAG, "", TRUE);
|
|
else
|
|
{
|
|
const TString16 lingua = mask.get(F_CODLIN);
|
|
const TString codart(row_mask.get(FR_CODARTMAG));
|
|
TString desc(anamag.get("DESCR"));
|
|
|
|
if (mask.doc()[current_doc_row].is_omaggio())
|
|
{
|
|
static TString80 dicitura_omaggio("---");
|
|
|
|
if (dicitura_omaggio == "---")
|
|
{
|
|
TConfig c(CONFIG_STUDIO);
|
|
|
|
dicitura_omaggio = c.get("DESOMAGGI");
|
|
if (dicitura_omaggio.empty())
|
|
dicitura_omaggio = "(OMAGGIO)";
|
|
}
|
|
desc << " " << dicitura_omaggio;
|
|
}
|
|
if (lingua.not_empty())
|
|
{
|
|
TLocalisamfile deslin(LF_DESLIN);
|
|
|
|
deslin.setkey(2);
|
|
deslin.put(DESLIN_CODART, codart);
|
|
deslin.put(DESLIN_CODLIN, lingua);
|
|
if (deslin.read() == NOERR)
|
|
{
|
|
static int __lingua_only = 3;
|
|
|
|
if (__lingua_only > 2)
|
|
{
|
|
TConfig c(CONFIG_DITTA, "ve");
|
|
|
|
__lingua_only = c.get_bool("LINGUA_ONLY");
|
|
}
|
|
if (__lingua_only)
|
|
desc = deslin.get(DESLIN_DESCR);
|
|
else
|
|
desc << '\n' << deslin.get(DESLIN_DESCR);
|
|
}
|
|
}
|
|
|
|
TString descest(anamag.get("DESCRAGG"));
|
|
if (descest.not_empty())
|
|
desc << "\n" << descest;
|
|
|
|
row_mask.set(FR_DESCR, desc);
|
|
|
|
/*
|
|
TLocalisamfile umart(LF_UMART);
|
|
umart.setkey(1);
|
|
umart.zero();
|
|
umart.put(UMART_CODART, codart);
|
|
if (umart.read(_isgteq) == NOERR && codart == umart.get(UMART_CODART))
|
|
*/
|
|
TString key; key << codart << "|1";
|
|
const TRectype& umart = cache().get(LF_UMART, key);
|
|
if (!umart.empty())
|
|
{
|
|
curr_um = umart.get(UMART_UM);
|
|
curr_fc = umart.get_real(UMART_FC);
|
|
}
|
|
else
|
|
{
|
|
curr_um.cut(0);
|
|
curr_fc = 1.0;
|
|
}
|
|
row_mask.set(FR_UMQTA, curr_um);
|
|
upd_colli_peso_tara(row_mask, anamag);
|
|
}
|
|
|
|
condv.ricerca();
|
|
mask.doc()[current_doc_row].put(RDOC_PREZZO, row_mask.get(FR_PREZZO));
|
|
|
|
const int pos = row_mask.id2pos(FR_CODIVA);
|
|
|
|
if (pos >= 0)
|
|
iva_handler(row_mask.fld(pos), 0);
|
|
|
|
if (found)
|
|
{
|
|
TString16 caus(row_mask.get(FR_CAUS));
|
|
|
|
if (caus.empty())
|
|
caus = mask.get(F_CAUSMAG);
|
|
|
|
if (caus.not_empty())
|
|
{
|
|
const TCausale_magazzino c(caus);
|
|
|
|
if (!c.movimenta_sospesi())
|
|
{
|
|
const TRectype & rec = cache().get(LF_ANAMAG, row_mask.get(FR_CODARTMAG));
|
|
|
|
if (rec.get_bool("SOSPESO"))
|
|
return error_box("Articolo %s sospeso, quindi non movmentabile", (const char *)codart);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
else
|
|
if (key == K_F8 && !sh.sheet_mask().is_running())
|
|
{
|
|
static int explode_db = 3;
|
|
static bool valcomp = FALSE;
|
|
static bool matbase = TRUE;
|
|
static TExplosion_grouping raggart = RAGGR_EXP_NONE;
|
|
static bool elrorig = FALSE;
|
|
static int livello = 1;
|
|
static int ordin = 0;
|
|
|
|
if (explode_db > 2)
|
|
{
|
|
TConfig d(CONFIG_DITTA, "ve");
|
|
|
|
explode_db = d.get_bool("EXPLODEDB", "ve");
|
|
valcomp = d.get_bool("VALCOMP", "ve");
|
|
matbase = d.get_bool("TIPOESPL", "ve");
|
|
raggart = (TExplosion_grouping) d.get_int("RAGGART", "ve");
|
|
livello = d.get_int("LIVESPL", "ve");
|
|
elrorig = d.get_bool("ELRORIG", "ve");
|
|
ordin = d.get_int("ORDDB", "ve");
|
|
}
|
|
if (explode_db && !sh.sheet_mask().is_running())
|
|
{
|
|
TDocumento & doc = mask.doc();
|
|
TRiga_documento & curr_row = doc[current_doc_row];
|
|
|
|
sh.update_row(current_doc_row - 1);
|
|
curr_row.autosave(sh);
|
|
|
|
TDistinta_tree db;
|
|
TArray components;
|
|
|
|
db.set_root(curr_row);
|
|
|
|
const int items = db.explode(components, matbase, raggart, livello, "A", ordin);
|
|
if (items > 0)
|
|
{
|
|
TProgind pi(items, "Esplosione in corso...",FALSE, TRUE);
|
|
int row = current_doc_row;
|
|
const TString16 tiporiga(curr_row.tipo().codice());
|
|
|
|
TString_array& str_arr = sh.rows_array();
|
|
|
|
for (int i = components.first(); i < items; i = components.succ(i))
|
|
{
|
|
pi.addstatus(1L);
|
|
TRiga_esplosione & r = (TRiga_esplosione &) components[i];
|
|
TRiga_documento & new_row = doc.insert_row(row + 1, tiporiga);
|
|
//sh.insert(row, FALSE);
|
|
str_arr.insert(new TToken_string, row);
|
|
|
|
TDocumento::copy_data(new_row, curr_row);
|
|
new_row.put(RDOC_CODART, r.articolo());
|
|
new_row.put(RDOC_CODARTMAG, r.articolo());
|
|
new_row.put(RDOC_LIVELLO, r.giacenza());
|
|
new_row.zero(RDOC_DESCR);
|
|
new_row.put(RDOC_DESCLUNGA, "X");
|
|
new_row.zero(RDOC_DESCEST);
|
|
new_row.put(RDOC_CHECKED, "");
|
|
new_row.put(RDOC_UMQTA, r.um());
|
|
new_row.put(RDOC_QTA, r.val() /* * qta_fin */);
|
|
new_row.autoload(sh);
|
|
sh.check_row(row++);
|
|
new_row.autosave(sh);
|
|
if (!valcomp)
|
|
{
|
|
new_row.zero(RDOC_PREZZO);
|
|
new_row.autoload(sh);
|
|
}
|
|
}
|
|
if (elrorig)
|
|
{
|
|
doc.destroy_row(current_doc_row, TRUE);
|
|
sh.destroy(current_doc_row - 1, FALSE);
|
|
row--;
|
|
}
|
|
else
|
|
if (valcomp)
|
|
{
|
|
curr_row.zero(RDOC_PREZZO);
|
|
curr_row.autoload(sh);
|
|
}
|
|
sh.force_update();
|
|
sh.select(row-1);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
bool codartmag_handler( TMask_field& f, KEY key )
|
|
{
|
|
bool to_check = key == K_TAB && f.focusdirty();
|
|
TMask & m = f.mask();
|
|
const TString codart = f.get();
|
|
const bool artmag = codart.not_empty();
|
|
TDocumento_mask& mask= (TDocumento_mask&) m.get_sheet()->mask();
|
|
|
|
if (!to_check)
|
|
{
|
|
TSheet_field * s = m.get_sheet();
|
|
if (s)
|
|
to_check = !s->mask().is_running();
|
|
}
|
|
if (to_check)
|
|
{
|
|
|
|
m.show(FR_UMQTA, artmag);
|
|
m.show(FR_UMQTA2, !artmag);
|
|
|
|
mask.update_giacenza();
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool liv_handler( TMask_field& f, KEY key )
|
|
{
|
|
bool ok = TRUE;
|
|
TDocumento_mask & mask=(TDocumento_mask &) f.mask().get_sheet()->mask();
|
|
|
|
if (key == K_TAB && f.focusdirty() && !f.get().empty())
|
|
{
|
|
const int levnum=f.dlg()-FR_LIV1+1;
|
|
// Se e' abilitato l'autoinserimento del livello di giacenza...
|
|
if (mask.livelli().autoinsert(levnum))
|
|
mask.livelli().autoinsert(levnum, f);
|
|
}
|
|
|
|
if (key == K_ENTER && !f.get().empty())
|
|
{
|
|
static int checkgiac = 3;
|
|
if (checkgiac > 2)
|
|
{
|
|
TConfig c(CONFIG_DITTA);
|
|
checkgiac = c.get_bool("LIVPERART", "ve");
|
|
}
|
|
if (mask.is_running() && checkgiac)
|
|
{
|
|
TLocalisamfile fl(LF_MAG);
|
|
fl.setkey(2);
|
|
TRectype & r = fl.curr();
|
|
TMask& row_mask = f.mask();
|
|
TEsercizi_contabili esc;
|
|
const int annoes = esc.date2esc(mask.get_date(F_DATADOC));
|
|
|
|
r.put(MAG_ANNOES, annoes);
|
|
TString16 codmag(row_mask.get(FR_CODMAG));
|
|
|
|
codmag.left_just(3);
|
|
codmag << row_mask.get(FR_CODDEP);
|
|
r.put(MAG_CODMAG, codmag);
|
|
const TString80 codart(row_mask.get(FR_CODART));
|
|
|
|
r.put(MAG_CODART, codart);
|
|
TString liv;
|
|
|
|
for (int l = 0 ; l <= f.dlg() - FR_LIV1; l++)
|
|
mask.doc().livelli().pack_grpcode(liv,row_mask.get(FR_LIV1+l),l+1);
|
|
|
|
r.put(MAG_LIVELLO, liv);
|
|
|
|
TRectype new_rec(r);
|
|
if (fl.read() != NOERR)
|
|
{
|
|
ok = yesno_box("Il codice di giacenza %s non e' legato all' articolo. Devo legarlo", (const char *)f.get());
|
|
if (ok)
|
|
{
|
|
fl.setkey(1);
|
|
r = new_rec;
|
|
r.put("NRIGA", 999);
|
|
int nriga = 1;
|
|
if (fl.read(_isgteq) == NOERR)
|
|
fl.prev();
|
|
if (codart == fl.get("CODART"))
|
|
nriga = fl.get_int("NRIGA")+1;
|
|
new_rec.put("NRIGA", nriga);
|
|
const int err = new_rec.write(fl);
|
|
if (err != NOERR)
|
|
ok = error_box("Non sono riuscito a legare il codice di giacenza. Errore %d", err);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (f.to_check(key, TRUE))
|
|
{
|
|
if (f.dlg() < FR_LIV4)
|
|
{
|
|
TMask& row_mask = f.mask();
|
|
TMask_field & next = row_mask.field(f.dlg() + 1);
|
|
if (f.get().not_empty())
|
|
next.enable();
|
|
else
|
|
{
|
|
next.reset();
|
|
next.disable();
|
|
}
|
|
next.on_hit();
|
|
}
|
|
TDocumento_mask& mask=(TDocumento_mask&)f.mask().get_sheet()->mask();
|
|
mask.update_giacenza();
|
|
}
|
|
return ok;
|
|
}
|
|
|
|
void set_curr_um(const TMask & m)
|
|
{
|
|
curr_um = m.get(FR_UMQTA);
|
|
curr_fc = -1.0;
|
|
}
|
|
|
|
bool umart_handler( TMask_field& f, KEY key )
|
|
{
|
|
TMask& row_mask = f.mask( );
|
|
TDocumento_mask & mask = (TDocumento_mask &) row_mask.get_sheet()->mask();
|
|
// Se qualcuno cerca di modificare la maschera
|
|
if ( key == K_TAB && f.focusdirty() && mask.is_running())
|
|
{
|
|
TSheet_field& sh = (TSheet_field &)mask.field(F_SHEET);
|
|
const int current_doc_row = sh.selected() + 1;
|
|
|
|
TCond_vendita & condv = mask.condv();
|
|
condv.set_riga(&row_mask);
|
|
|
|
const TString& um = f.get();
|
|
real fc(1.0);
|
|
|
|
if (um.not_empty() && curr_um.not_empty() && um != curr_um)
|
|
{
|
|
TLocalisamfile umart(LF_UMART);
|
|
umart.setkey(2);
|
|
umart.put(UMART_CODART, row_mask.get(FR_CODARTMAG));
|
|
umart.put(UMART_UM, um);
|
|
if (umart.read() == NOERR)
|
|
{
|
|
real qta(row_mask.get_real(FR_QTA));
|
|
fc = umart.get_real(UMART_FC);
|
|
if (curr_fc < ZERO)
|
|
{
|
|
umart.put(UMART_CODART, row_mask.get(FR_CODARTMAG));
|
|
umart.put(UMART_UM, curr_um);
|
|
if (umart.read() == NOERR)
|
|
curr_fc = umart.get_real(UMART_FC);
|
|
else
|
|
curr_fc = 1.0;
|
|
}
|
|
qta *= curr_fc;
|
|
qta /= fc;
|
|
qta.round(5);
|
|
row_mask.set(FR_QTA, qta);
|
|
qta = row_mask.get_real(FR_QTAEVASA);
|
|
qta *= curr_fc;
|
|
qta /= fc;
|
|
qta.round(5);
|
|
row_mask.set(FR_QTAEVASA, qta);
|
|
}
|
|
|
|
}
|
|
curr_um = um;
|
|
curr_fc = fc;
|
|
condv.ricerca(TRUE);
|
|
mask.doc()[current_doc_row].put(RDOC_PREZZO, row_mask.get(FR_PREZZO));
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool um_handler( TMask_field& f, KEY key )
|
|
{
|
|
// Se qualcuno cerca di modificare la maschera
|
|
if ( key == K_TAB && f.focusdirty())
|
|
{
|
|
TMask& row_mask = f.mask( );
|
|
TDocumento_mask & mask = (TDocumento_mask &) row_mask.get_sheet()->mask();
|
|
TTable & ums = (TTable &) ((TEdit_field &) f).browse()->cursor()->file();
|
|
|
|
const TString16 um(f.get());
|
|
real fc(1.0);
|
|
|
|
if (um.not_empty() && curr_um.not_empty() && um != curr_um)
|
|
{
|
|
ums.put("CODTAB", curr_um);
|
|
if (ums.read() == NOERR)
|
|
{
|
|
real qta(row_mask.get_real(FR_QTA));
|
|
const TString16 umsrif0(ums.get("S7"));
|
|
const real fc0 = ums.get_real("R10");
|
|
if (um == umsrif0)
|
|
fc = fc0;
|
|
else
|
|
{
|
|
ums.put("CODTAB", um);
|
|
if (ums.read() == NOERR)
|
|
{
|
|
const real fc1 = ums.get_real("R10");
|
|
const TString16 umsrif1(ums.get("S7"));
|
|
|
|
|
|
if (fc1 > ZERO)
|
|
{
|
|
if (curr_um == umsrif1)
|
|
fc = 1 / fc1;
|
|
else
|
|
if (umsrif0 == ums.get("S7"))
|
|
fc = fc0 / ums.get_real("R10");
|
|
}
|
|
}
|
|
}
|
|
qta *= fc;
|
|
qta.round(5);
|
|
row_mask.set(FR_QTA, qta);
|
|
qta = row_mask.get_real(FR_QTAEVASA);
|
|
qta *= fc;
|
|
qta.round(5);
|
|
row_mask.set(FR_QTAEVASA, qta);
|
|
}
|
|
|
|
}
|
|
curr_um = um;
|
|
curr_fc = fc;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool descr_handler( TMask_field& f, KEY key )
|
|
{
|
|
if (key == K_TAB && f.focusdirty())
|
|
{
|
|
const TString s(f.get());
|
|
if (s.find('\n') < 0)
|
|
{
|
|
TLocalisamfile anamag(LF_ANAMAG);
|
|
|
|
anamag.zero();
|
|
anamag.setkey(2);
|
|
anamag.put(ANAMAG_DESCR, ((TZoom_field &) f).get_first_line());
|
|
if (anamag.read() == NOERR)
|
|
{
|
|
f.mask().set(FR_CODART, anamag.get(ANAMAG_CODART));
|
|
f.mask().field(FR_CODART).set_dirty();
|
|
f.mask().check_field(FR_CODART);
|
|
}
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool qtaart_handler( TMask_field& f, KEY key )
|
|
{
|
|
// Se qualcuno cerca di modificare la maschera
|
|
if ( key == K_TAB && f.focusdirty())
|
|
{
|
|
TMask& row_mask = f.mask( );
|
|
TDocumento_mask & mask = (TDocumento_mask &) row_mask.get_sheet()->mask();
|
|
TSheet_field& sh = (TSheet_field &)mask.field(F_SHEET);
|
|
const int current_doc_row = sh.selected() + 1;
|
|
|
|
TCond_vendita & condv = mask.condv();
|
|
|
|
condv.set_riga(&row_mask);
|
|
condv.ricerca(FALSE, TRUE);
|
|
mask.doc()[current_doc_row].put(RDOC_PREZZO, row_mask.get(FR_PREZZO));
|
|
const TString & codart = row_mask.get(FR_CODARTMAG);
|
|
|
|
if (codart.not_empty())
|
|
{
|
|
TLocalisamfile anamag(LF_ANAMAG);
|
|
|
|
anamag.put(ANAMAG_CODART, codart);
|
|
if (anamag.read() == NOERR)
|
|
upd_colli_peso_tara(row_mask, anamag.curr());
|
|
}
|
|
|
|
}
|
|
else
|
|
if (key == K_ENTER && f.dirty())
|
|
{
|
|
TDocumento_mask& mask=(TDocumento_mask&)f.mask().get_sheet()->mask();
|
|
TDocumento & doc = mask.doc();
|
|
|
|
if ((doc.tipo().check_giac() || doc.tipo().check_disp()) &&
|
|
main_app().has_module(MGAUT, CHK_DONGLE) && doc.tipo().mov_mag())
|
|
{
|
|
TSheet_field& sf = mask.sfield(F_SHEET);
|
|
TToken_string& row = sf.row(sf.selected());
|
|
const TString codart = row.get(sf.cid2index(FR_CODARTMAG));
|
|
|
|
if (codart.not_empty())
|
|
{
|
|
TString16 codmag = row.get(sf.cid2index(FR_CODMAG));
|
|
const TString16 coddep = row.get(sf.cid2index(FR_CODDEP));
|
|
if (!coddep.blank())
|
|
codmag << coddep;
|
|
|
|
TString16 livello;
|
|
for (int i = 0; i < 4; i++)
|
|
{
|
|
const char* liv = row.get(sf.cid2index(FR_LIV1+i));
|
|
if (*liv > ' ')
|
|
livello << liv;
|
|
else
|
|
break;
|
|
}
|
|
|
|
real qta(row.get(sf.cid2index(FR_QTA)));
|
|
const TString16 caus(mask.get(F_CAUSMAG));
|
|
TCausale_magazzino c(caus);
|
|
const long nmovmag = doc.get_long(DOC_MOVMAG);
|
|
|
|
if (nmovmag != 0)
|
|
{
|
|
TLocalisamfile rmovmag(LF_RMOVMAG); rmovmag.setkey(2);
|
|
rmovmag.put(RMOVMAG_CODART, codart);
|
|
rmovmag.put(RMOVMAG_LIVGIAC, livello);
|
|
rmovmag.put(RMOVMAG_CODMAG, codmag);
|
|
rmovmag.put(RMOVMAG_NUMREG, nmovmag);
|
|
if (rmovmag.read() == NOERR)
|
|
qta -= rmovmag.get_real(RMOVMAG_QUANT);
|
|
}
|
|
if (doc.tipo().check_giac())
|
|
{
|
|
real giac(mask.get(F_CURGIAC));
|
|
if (giac < -(c.sgn(s_giac) * qta))
|
|
warning_box("Attenzione giacenza negativa");
|
|
}
|
|
else
|
|
if (doc.tipo().check_disp())
|
|
{
|
|
real disp(mask.get(F_CURDISP));
|
|
if (disp < -(c.sgn(s_giac) * qta))
|
|
warning_box("Attenzione disponibilita' negativa");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return qta_handler(f, key);
|
|
}
|
|
|
|
bool qta_handler( TMask_field& f, KEY key )
|
|
{
|
|
// Se qualcuno cerca di modificare la maschera
|
|
if ( key == K_TAB && f.focusdirty())
|
|
{
|
|
TMask& row_mask = f.mask( );
|
|
const real qta_evasa = row_mask.get_real(FR_QTAEVASA);
|
|
const real qta(f.get());
|
|
|
|
if (qta_evasa > 0 && qta_evasa >= qta)
|
|
{
|
|
row_mask.set(FR_RIGAEVASA, "X");
|
|
row_mask.disable(FR_RIGAEVASA);
|
|
}
|
|
else
|
|
row_mask.enable(FR_RIGAEVASA);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
bool qta_evasa_handler( TMask_field& f, KEY key )
|
|
{
|
|
if (f.to_check(key))
|
|
{
|
|
TMask& row_mask = f.mask( );
|
|
const real qta_evasa(f.get());
|
|
const real qta = row_mask.get_real(FR_QTA);
|
|
|
|
if (qta_evasa > 0 && qta_evasa >= qta)
|
|
{
|
|
row_mask.set(FR_RIGAEVASA, "X");
|
|
row_mask.disable(FR_RIGAEVASA);
|
|
}
|
|
else
|
|
row_mask.enable(FR_RIGAEVASA);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool causmag_handler( TMask_field& f, KEY key )
|
|
{
|
|
if (f.to_check(key))
|
|
{
|
|
TMask& row_mask = f.mask( );
|
|
TDocumento_mask & mask = (TDocumento_mask &) row_mask.get_sheet()->mask();
|
|
TString16 causmag(f.get());
|
|
if (causmag.empty())
|
|
causmag = mask.get(F_CAUSMAG);
|
|
|
|
TCausale_magazzino c(cache().get("%CAU", causmag));
|
|
if (c.empty())
|
|
{
|
|
cache().discard("%CAU", causmag);
|
|
}
|
|
else
|
|
{
|
|
if (c.has_default_mag() && row_mask.get(FR_CODMAG).empty())
|
|
{
|
|
row_mask.set(FR_CODMAG, c.default_mag(), TRUE);
|
|
row_mask.set(FR_CODDEPC, "", TRUE);
|
|
}
|
|
if (c.has_default_dep() && row_mask.get(FR_CODDEP).empty())
|
|
row_mask.set(FR_CODDEP, c.default_dep(), TRUE);
|
|
|
|
if (!c.caus_collegata().empty())
|
|
{
|
|
c = cache().get("%CAU", c.caus_collegata());
|
|
if (c.has_default_mag() && row_mask.get(FR_CODMAGC).empty())
|
|
{
|
|
row_mask.set(FR_CODMAGC, c.default_mag(), TRUE);
|
|
row_mask.set(FR_CODDEPC, "", TRUE);
|
|
}
|
|
if (c.has_default_dep() && row_mask.get(FR_CODDEPC).empty())
|
|
row_mask.set(FR_CODDEPC, c.default_dep(), TRUE);
|
|
|
|
static int copy_defmagc = -883;
|
|
if (copy_defmagc < 0)
|
|
{
|
|
TFilename fname = mask.doc().tipo().profile_name();
|
|
fname.ext("ini");
|
|
TConfig c_tipo_documento(fname,"MAIN");
|
|
copy_defmagc = c_tipo_documento.get_bool("DEFMAGXCOLL");
|
|
}
|
|
if (copy_defmagc!=0)
|
|
{
|
|
if (row_mask.get(FR_CODMAGC).empty())
|
|
row_mask.set(FR_CODMAGC, mask.stdmag(), TRUE);
|
|
if (row_mask.get(FR_CODDEPC).empty())
|
|
row_mask.set(FR_CODDEPC, mask.stddep(), TRUE);
|
|
}
|
|
}
|
|
if (!c.movimenta_sospesi())
|
|
{
|
|
const TRectype & rec = cache().get(LF_ANAMAG, row_mask.get(FR_CODARTMAG));
|
|
|
|
if (rec.get_bool("SOSPESO"))
|
|
return error_box("Articolo %s sospeso, quindi non movmentabile", (const char *)rec.get(ANAMAG_CODART));
|
|
}
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool sppr_handler( TMask_field& f, KEY key )
|
|
{
|
|
TMask& row_mask = f.mask();
|
|
|
|
if (key == K_TAB && (f.focusdirty() || row_mask.get(FR_DESCR).empty()))
|
|
{
|
|
const int pos = row_mask.id2pos(FR_PREZZO);
|
|
|
|
if (pos >= 0)
|
|
{
|
|
TMask & mask = row_mask.get_sheet()->mask();
|
|
TEdit_field & e = (TEdit_field &) f;
|
|
TRelation * r = e.browse()->cursor()->relation();
|
|
const TString16 cod = r->curr().get("COD");
|
|
TSpesa_prest sp(NULL, cod == "SPP" ? 'S' : 'P');
|
|
if (sp.read(row_mask.get(FR_CODART)) == NOERR)
|
|
{
|
|
const char tipo = sp.tipo();
|
|
const bool qta_val_fl = tipo == 'Q';
|
|
const bool perc_fl = tipo == 'P';
|
|
|
|
short pos = row_mask.id2pos(FR_UMQTASP);
|
|
if (pos >= 0)
|
|
row_mask.fld(pos).enable(!perc_fl);
|
|
pos = row_mask.id2pos(FR_PREZZO);
|
|
if (pos >= 0)
|
|
row_mask.fld(pos).enable(!perc_fl);
|
|
pos = row_mask.id2pos(FR_SCONTO);
|
|
if (pos >= 0)
|
|
row_mask.fld(pos).enable(!perc_fl);
|
|
pos = row_mask.id2pos(FR_QTA);
|
|
if (pos >= 0)
|
|
{
|
|
row_mask.fld(pos).show(!perc_fl);
|
|
row_mask.fld(pos).enable(qta_val_fl);
|
|
}
|
|
pos = row_mask.id2pos(FR_PERCSP);
|
|
if (pos >= 0)
|
|
{
|
|
row_mask.fld(pos).show(perc_fl);
|
|
row_mask.fld(pos).enable(perc_fl);
|
|
}
|
|
|
|
if (!perc_fl)
|
|
{
|
|
const real cambio = mask.get(F_CAMBIO);
|
|
real prezzo = sp.prezzo();
|
|
const TString& doc_valuta = mask.get(F_CODVAL);
|
|
const bool controeuro = mask.get_bool(F_CONTROEURO);
|
|
|
|
sppr_calc(sp, doc_valuta, cambio, prezzo, controeuro ? _exchange_contro : _exchange_base);
|
|
row_mask.set(FR_PREZZO, prezzo);
|
|
|
|
}
|
|
const int posiva = row_mask.id2pos(FR_CODIVA);
|
|
if (posiva >= 0)
|
|
iva_handler(row_mask.fld(posiva), 0);
|
|
}
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool TDocumento_mask::numdocrif_search_handler(TMask_field& f, KEY key)
|
|
{
|
|
if (key == K_F9)
|
|
{
|
|
TMask& m = f.mask();
|
|
|
|
TRectype filtrec(LF_DOC);
|
|
filtrec.put(DOC_TIPOCF, m.get(F_TIPOCF));
|
|
filtrec.put(DOC_CODCF, m.get(F_CODCF));
|
|
filtrec.put(DOC_PROVV, m.get(F_PROVV));
|
|
filtrec.put(DOC_ANNO, m.get(F_ANNO));
|
|
|
|
TRelation rel(LF_DOC);
|
|
rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF");
|
|
TSorted_cursor cur(&rel, "TIPOCF|CODCF|PROVV|ANNO|CODNUM|NUMDOCRIF", "", 2, &filtrec, &filtrec);
|
|
TString80 f; f.format("CODNUM==\"%s\"", (const char *)m.get(F_CODNUM));
|
|
|
|
cur.setfilter(f);
|
|
TCursor_sheet sheet(&cur, "TIPOCF|CODCF|ANNO|CODNUM|NUMDOCRIF|DATADOCRIF|DOC1|DOC2|DOC3|NDOC|20->RAGSOC",
|
|
"Documento di riferimento",
|
|
"Tipo|Codice|Anno|Numeraz|Docum.Rif.|Data@10|Docum.Rif. 1|Docum.Rif. 2|Docum.Rif. 3|Documento|Ragione Sociale@50",
|
|
0, 1);
|
|
if (sheet.run() == K_ENTER)
|
|
{
|
|
const TString16 ndoc = sheet.row(-1).get(9);
|
|
m.set(F_NDOC, ndoc);
|
|
m.stop_run(K_AUTO_ENTER);
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
bool TDocumento_mask::datadocrif_handler(TMask_field& f, KEY key)
|
|
{
|
|
if (key == K_ENTER && f.empty())
|
|
{
|
|
const TDocumento_mask& m = (const TDocumento_mask&)f.mask();
|
|
if (m.get_bool(F_RAGGREFF))
|
|
{
|
|
const TDocumento& doc = m.doc();
|
|
if (doc.is_nota_credito())
|
|
return f.error_box("E' necessario specificare data e numero documento di riferimento\n"
|
|
"quando si desidera generare effetti raggruppati");
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool link_handler( TMask_field& f, KEY key )
|
|
{
|
|
if (key == K_SPACE)
|
|
{
|
|
const TSheet_field & sf = *f.mask().get_sheet();
|
|
const TDocumento_mask & m = (const TDocumento_mask & )sf.mask();
|
|
const TDocumento & d = m.doc();
|
|
const int nrow = sf.selected() + 1;
|
|
const TRiga_documento & r = d[nrow];
|
|
r.edit(LF_DOC, "DAPROVV|DAANNO|DACODNUM|DANDOC");
|
|
}
|
|
return TRUE;
|
|
}
|