Patch level : 3.0 nopatch

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Documentazione modulo vendita al dettaglio


git-svn-id: svn://10.65.10.50/trunk@14149 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2006-07-11 13:12:41 +00:00
parent c434cad322
commit cd80466f09
22 changed files with 1556 additions and 133 deletions

View File

@ -1,3 +1,3 @@
34
0
$rdoc|||513|31|Righe documenti di vendita|NDOC*3||
$rdoc|||520|31|Righe documenti di vendita|NDOC*3||

View File

@ -1,5 +1,5 @@
34
55
56
CODNUM|1|4|0|Codice Numeriazione
ANNO|2|4|0|Anno
PROVV|1|1|0|Tipo numerazione <P>rovvisoria <D>efinitiva
@ -55,6 +55,7 @@ FASCMS|1|10|0|Fase Commessa
CODCOSTO|1|20|0|Centro di costo
CODAGG1|1|20|0|Codice aggiuntivo 1
CODAGG2|1|20|0|Codice aggiuntivo 2
PRIORITY|3|7|0|Priorita' MSP
7
CODNUM+ANNO+PROVV+NDOC+NRIGA|
CODNUM+ANNO+PROVV+CODART+LIVELLO+CODMAG|X

View File

@ -2,7 +2,7 @@
18
CODDITTA|3|5|0|CODICE DITTA
TIPO|1|1|0|TIPOLOGIA DOCUMENTO F fattura/R nota di credito/O ordine
DATADOC|5|8|0|DATA DOCUMENTO
DATADOC|1|10|0|DATA DOCUMENTO
CODDEP|1|5|0|CODICE DEPOSITO
CODMAG|1|3|0|CODICE MAGAZZINO
GRUPPO|1|5|0|GRUPPO

View File

@ -4,4 +4,4 @@ TIPO|1|3|0|TIPO TABELLA
CODICE|1|25|0|CODICE
DESCRI|1|70|0|DESCRIZIONE
1
TIPO+CODICE|X
TIPO+CODICE|

View File

@ -188,6 +188,8 @@ Col(25) = FR_TIPORIGA
[RIGHE]
[DEFAULT]
[HANDLERS]
[PROFILOGRUPPO]

View File

@ -168,18 +168,29 @@ TDocumento_form::TDocumento_form(TRectype& doc, TRelation& rel, bool definitiva,
bool found = false;
TFilename nomeform;
if (aggiuntivo)
found = tipo.additional_print_profile(nomeform);
else
found = tipo.main_print_profile(nomeform);
found &= nomeform.ends_with(".frm");
if (!found)
{
error_box(FR("Nome form di stampa '%s' non valido per il tipo documento %s"), (const char*)nomeform, (const char*)tipodoc);
const TTipo_documento & tipo = __tipi.tipo(tipodoc);
if (tipo.empty())
{
error_box(FR("Tipo di documento non valido: '%s'"), (const char*)tipodoc);
return;
}
if (tipo.printable())
{ // se non ci sono errori procede con la stampa
nomeform = aggiuntivo ? tipo.additional_print_profile() : tipo.main_print_profile(); // legge il nome del form di stampa
nomeform.trim();
_valid = true;
TFilename test(nomeform); test.ext("frm");
if (!test.custom_path())
{
error_box(FR("Nome form di stampa '%s' non valido per il tipo documento %s"), (const char*)nomeform, (const char*)tipodoc);
return;
}
}
else
return;
_valid = TRUE;
read(nomeform);
_cli_loaded= FALSE;
set_doc_ext(&doc); // istanzia TDocumentoEsteso
@ -1422,25 +1433,22 @@ void TStampaDoc_application::print_selected()
extdoc.scadenze_reset();
// Stampa eventuali documenti allegati
TFilename formagg;
if (extdoc.tipo().additional_print_profile(formagg))
{
const int ncopie2 = extdoc.tipo().get_int("I2");
const TFilename formagg = extdoc.tipo().additional_print_profile();
const int ncopie2 = extdoc.tipo().get_int("I2");
if (ncopie2 > 0) // Se esiste un tipo documento da accodare
{
TDocumento_form* secform = new TDocumento_form(cur.curr(), *_firmrel, _definitiva, _interattivo, true);
if (secform->valid())
{
for (int i = 0; i < ncopie2; i++)
{
print_documento(*secform);
extdoc.summary_reset();
extdoc.scadenze_reset();
}
}
delete secform;
}
if (!formagg.blank() && ncopie2 > 0) // Se esiste un tipo documento da accodare
{
TDocumento_form* secform = new TDocumento_form(cur.curr(), *_firmrel, _definitiva, _interattivo, TRUE);
if (secform->valid())
{
for (int i = 0; i < ncopie2; i++)
{
print_documento(*secform);
extdoc.summary_reset();
extdoc.scadenze_reset();
}
}
delete secform;
}
}

View File

@ -158,7 +158,6 @@ class TReport_doc : public TReport
{
size_t _first_msg;
protected:
virtual void include_libraries(bool reload);
virtual size_t get_usr_words(TString_array& words) const;
@ -686,7 +685,6 @@ void TReport_doc::include_libraries(bool reload)
}
TReport_doc::TReport_doc(const char* name)
{
// istanziamento e impostazione della relazione di gestione della ditta corrente
load(name); // Faccio la load altrimenti non include la libreria 1300.alx
@ -907,8 +905,30 @@ bool TReport_doc_app::print_loop(const TString& query)
TString msg; msg << TR("Report allegato inesistente") << " : " << profilo;
statbar_set_title(TASK_WIN, msg);
}
}
// Stampa eventuali allegati
TString16 codalleg = tipo.additional_print_profile();
codalleg.trim();
if (codalleg.not_empty())
{
TFilename profilo(codalleg); profilo.ext("rep");
if (profilo.custom_path())
{
int copies = tipo.additional_ncopie();
if (copies <= 0) copies = 1;
TReport_doc& allegato = reports.get(profilo);
// Il flag di definitvo deve essere false altrimenti riaggiorna lo stato e ristampa i documenti allegati
allegato.print(doc, book, false, copies, false);
}
else
{
TString msg; msg << TR("Report allegato inesistente") << " : " << codalleg;
statbar_set_title(TASK_WIN, msg);
}
}
}
if (book.pages() > 0)
book.print_or_preview();

View File

@ -294,6 +294,7 @@ int TLista_clifo::add(long cod)
return pos;
}
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
// TFatturazione_bolle_app
///////////////////////////////////////////////////////////

View File

@ -280,7 +280,7 @@ bool TIndustriosa_app::call_mci(TDocumento& doc, const TRectype& movimento)
ini.set_paragraph(para.row(0));
const TTipo_documento& td = doc.tipo();
const TString4 codcaus = td.causale();
const TString16 codcaus = td.causale();
TCausale causale(codcaus);
FOR_EACH_ASSOC_STRING(hvar, obj, key, field)

View File

@ -3,8 +3,6 @@
#include <printer.h>
#include <progind.h>
#include <sort.h>
#include "velib05.h"
#include "ve7.h"
#include "ve7200.h"
#include "ve7200a.h"

View File

@ -15,7 +15,6 @@ Item_09 = "Configurazione", [ACQVEN_020]
Item_10 = "Importazione documenti STORE", <dtmenu.men>
Item_11 = "Trasferimento PACK", <tpmenu.men>
[ACQVEN_001]
Caption = "Archivi e tabelle di base"
Picture = <ve00>

View File

@ -12,7 +12,6 @@ JOIN %ABE TO 33 ALIAS 206 INTO CODTAB==ASPBENI1
JOIN %CTR TO 33 ALIAS 207 INTO CODTAB==CAUSTRASP
JOIN %BAN TO 33 ALIAS 208 INTO CODTAB==CODABIA
END
DESCRIPTION
BEGIN
33->* "Documenti di vendita"
@ -33,7 +32,7 @@ GENERAL
BEGIN
OFFSET 0 0
FONT "Courier New"
SIZE 11
SIZE 10
MODULE "BOLLA STANDARD AGA"
PRI_DECIMALS 0 3
QTA_DECIMALS 3 3
@ -41,9 +40,7 @@ BEGIN
EXCLUDE "08,"
END
SECTION GRAPHICS ODD
FIGURA 99 84 63
BEGIN
PROMPT 1 2 "bolla.bmp"
@ -52,7 +49,6 @@ END
END
SECTION HEADER ODD 32
STRINGA 200 1
BEGIN
KEY "abilita/disabilita stampa intestazione ditta "

File diff suppressed because it is too large Load Diff

View File

@ -119,6 +119,22 @@ TSpesa_prest::TSpesa_prest(const TRectype& rec)
{
}
TSpesa_prest::genere() const
{
const TString & tipo = get("COD");
if (tipo == "SPP")
return RIGA_SPESEDOC:
else
if (tipo == "PRS")
return RIGA_PRESTAZIONI;
else
if (tipo == "RSS")
return RIGA_RISORSE;
else
if (tipo == "ATR")
return RIGA_ATTREZZATURE;
return ' ';
}
int TSpesa_prest::read(const char* codice)
{
const TString8 cod = get("COD");

View File

@ -14,6 +14,7 @@
#include "../cg/cg2103.h"
#include "../cg/cglib01.h"
#include "../mg/mglib.h"
#include "../mg/anamag.h"
#include "../mg/movmag.h"
#include "../pr/prlib.h"
#include "../sv/svlib01.h"
@ -169,6 +170,8 @@ void TDocumento::init()
_dirty_deny = FALSE;
check_modules();
TConfig c(CONFIG_DITTA, "ve");
}
TDocumento::TDocumento()
@ -879,6 +882,7 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
myself.update_conai();
myself.set_row_ids();
// const int rows = physical_rows();
long num = get_long("MOVMAG");
@ -969,9 +973,11 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
cambio = get_real(DOC_CAMBIO);
if (cambio == ZERO)
cambio = 1.0;
const bool esplodente = TCausale_magazzino(mov.get(DOC_CAUSMAG)).esplodente();
TString80 codice_riga;
TString16 caus_riga;
const TString8 cod_caus(mov.get(MOVMAG_CODCAUS));
TCausale_magazzino caus(cod_caus);
const bool esplodente = caus.esplodente();
const bool scarica_alt = caus.scarica_alternativi();
TString16 cod_caus_riga;
TDistinta_tree dist;
TString80 codart;
@ -979,17 +985,18 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
{
TRiga_documento & r = myself.row(i);
const bool articolo = r.is_articolo();
codart = r.get("CODARTMAG");
codice_riga = r.get("CODART");
if (codart.empty())
codart = codice_riga;
caus_riga = r.get("CAUSMAG");
bool distinta_da_esplodere = FALSE;
if (!articolo &&
(codice_riga.not_empty() &&
(caus_riga.not_empty() ? TCausale_magazzino(caus_riga).esplodente() : esplodente)))
distinta_da_esplodere = dist.set_root(TCodice_articolo(codice_riga));
if (articolo || distinta_da_esplodere)
bool valid_row = articolo;
cod_caus_riga = r.get("CAUSMAG");
if (articolo)
codart = r.get("CODARTMAG");
else
{
codart = r.get("CODART");
if (codart.full() && (cod_caus_riga.full() ? TCausale_magazzino(cod_caus_riga).esplodente() : esplodente))
valid_row = dist.set_root(TCodice_articolo(codart));
}
if (valid_row)
{
long r_num = r.get_long("MOVMAG");
if (r_num == 0)
@ -1009,6 +1016,14 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
rm.put(RMOVMAG_IMPIANTO, r.get("IMPIANTO"));;
rm.put(RMOVMAG_LINEA, r.get("LINEA"));
rm.put(RMOVMAG_CODMAG, r.get("CODMAG"));
if (articolo && (cod_caus_riga.full() ? TCausale_magazzino(cod_caus_riga).scarica_alternativi() : scarica_alt))
{
const TRectype art = cache().get(LF_ANAMAG, codart);
const TString & alt = art.get(ANAMAG_CODARTALT);
if (alt.full())
codart = alt;
}
rm.put(RMOVMAG_CODART, codart);
rm.put(RMOVMAG_LIVGIAC, r.get("LIVELLO"));
rm.put(RMOVMAG_UM, r.get("UMQTA"));
@ -1019,7 +1034,7 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
prezzo.change_to_firm_val();
rm.put(RMOVMAG_PREZZO, prezzo.get_num());
rm.put(RMOVMAG_CODCAUS, caus_riga);
rm.put(RMOVMAG_CODCAUS, cod_caus_riga);
rm.put(RMOVMAG_TIPORIGA, (char) riga_dadocumento);
}
}
@ -1764,7 +1779,7 @@ void TDocumento::update_tabella_iva()
// Aggiorna o aggiunge l'elemento se non esiste
const TCodiceIVA & iva = r.iva();
const TString4 cod(iva.codice());
if (cod.not_empty())
if (cod.full())
{
TRiepilogo_iva * aliquota = (TRiepilogo_iva *) table.objptr(cod);
if (aliquota == NULL)
@ -1848,21 +1863,22 @@ void TDocumento::update_tabella_iva()
if (!val.is_zero())
{
const TString4 codiva = codiva_es.not_empty() ? (const TString &) codiva_es : codiva_spese();
const TString& codiva = codiva_es.full() ? (const TString &) codiva_es : codiva_spese();
TRiepilogo_iva* ri = (TRiepilogo_iva*)table.objptr(codiva);
if (ri == NULL)
if (ri == NULL && codiva.full())
{
ri = new TRiepilogo_iva(TCodiceIVA(codiva));
table.add(codiva, ri);
}
ri->imp_spese() += val;
if (ri != NULL)
ri->imp_spese() += val;
tot_doc += val;
if (!doc_al_lordo)
{
val = spese_incasso(ALL_DECIMALS, _imposta);
ri->iva_spese() += val;
if (ri != NULL)
ri->iva_spese() += val;
tot_doc += val;
}
}
@ -1871,21 +1887,24 @@ void TDocumento::update_tabella_iva()
val = bolli(real(tot_doc - rit), ALL_DECIMALS, doc_al_lordo ? _lordo : _netto);
if (val != ZERO)
{
const TString16 codiva = codiva_bolli();
TRiepilogo_iva* ri = (TRiepilogo_iva *) table.objptr(codiva);
const TString& codiva = codiva_bolli();
if (codiva.full())
{
TRiepilogo_iva* ri = (TRiepilogo_iva*)table.objptr(codiva);
if (ri == NULL)
{
ri = new TRiepilogo_iva(TCodiceIVA(codiva));
table.add(codiva, ri);
}
if (!doc_al_lordo)
{
real valiva = bolli(real(tot_doc - rit), ALL_DECIMALS, _imposta);
ri->iva_spese() += valiva;
tot_doc += valiva;
}
ri->imp_spese() += val;
}
if (ri == NULL)
{
ri = new TRiepilogo_iva(TCodiceIVA(codiva));
table.add(codiva, ri);
}
if (!doc_al_lordo)
{
real valiva = bolli(real(tot_doc - rit), ALL_DECIMALS, _imposta);
ri->iva_spese() += valiva;
tot_doc += valiva;
}
ri->imp_spese() += val;
tot_doc += val;
}
@ -2188,7 +2207,6 @@ TRecord_array& TDocumento::body(int logicnum) const
const bool order = is_ordine();
for (int i = r.last_row(); i > 0; i = r.pred_row(i))
{
TRectype& rec = r[i];
TRecfield dcons(rec, RDOC_DATACONS);
@ -2236,7 +2254,10 @@ void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old,
sh->destroy(i - 1);
}
}
TString4 cod_iva_cli;
const int nspese = spese_aut.items();
if (nspese > 0)
{
TString16 key; key.format("%c|%ld", get_char(DOC_TIPOCF), get_long(DOC_CODCF));
@ -2308,11 +2329,10 @@ void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old,
real TDocumento::calc_conai_qta(int type)
{
const char * const __conai_art_names[] = {"CONACC", "CONALL", "CONCAR", "CONPLA", "CONLEG", "CONVET"};
const char * const __conai_art_names[] = {"CONACC", "CONALL", "CONCAR", "CONPLA", "CONLEG", "CONVET"};
const int nrows = physical_rows();
real qta;
for (int i = nrows; i > 0; i--)
{
const TRiga_documento& r = row(i);
@ -2331,7 +2351,6 @@ real TDocumento::calc_conai_qta(int type)
qta += row_qta;
}
}
return qta;
}

View File

@ -196,7 +196,9 @@ const TString_array& TTipo_documento::sheet_columns() const
{
TFilename pn; profile_name(pn);
TConfig prof(pn, "SHEET");
for (int i = 0; i < MAX_COLUMNS; i++)
TString8 col;
const int ncols = prof.get_int("NCOLS");
for (int i = 1; i <= ncols; i++)
{
const TString& id = prof.get("Col", NULL, i);
if (atoi(id) <= 0)
@ -834,6 +836,11 @@ TFormula_documento::TFormula_documento(const TRectype& rec)
_expr = new TExpr_documento(expr_string(), et);
}
TObject* TFormula_documento::dup() const
{
return new TFormula_documento(*this);
}
TFormula_documento::~TFormula_documento()
{
if (_expr)

View File

@ -170,7 +170,6 @@ int TLista_documenti::write(bool re) const
}
///////////////////////////////////////////////////////////
// TParametri_elaborazione
///////////////////////////////////////////////////////////

View File

@ -265,7 +265,6 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do
const TDate& data_elab, bool interattivo)
{
TWait_cursor hourglass;
TToken_string campi_doc(128); // Lista di campi che devono essere uguali
campi_doc = "TIPOCF|CODCF|CODVAL|CODLIN"; // Uguali sempre

View File

@ -9,6 +9,18 @@
#include "velib04.h"
#include "../ca/calib01.h"
#include <mov.h>
#include <rmov.h>
#include <rmoviva.h>
#include <clifo.h>
#include <cfven.h>
#include <nditte.h>
#include <occas.h>
#include <scadenze.h>
#include <doc.h>
#include <rdoc.h>
#include "velib.h"
#include "../cg/cg2103.h"
#include "../cg/cglib02.h"
#include "../cg/cgsaldac.h"
@ -973,6 +985,7 @@ bool TContabilizzazione::test_swap()
}
const bool s = (t == iva_vendite) ^ (sez == 'D');
return s;
}
@ -1174,8 +1187,8 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
// Codice registro IVA
TRegistro& registro = _caus->reg();
const bool iva_mov = registro.ok();
long ult_prot = 0;
if (iva_mov)
{
if (recontabilizing)
@ -1202,7 +1215,7 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
// Reperisce la valuta
TDate datacam(doc.get_date(DOC_DATACAMBIO));
real cambio(doc.cambio());
TString4 codval(doc.valuta()); codval.trim();
TString4 codval(doc.valuta());
codval.trim();
@ -1263,7 +1276,6 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
const TString4 codpag(doc.get(DOC_CODPAG));
if (sc_enabled(data_reg) || codpag.not_empty()) // La condizione di pagamento va controllata
{ // se e' abilitato il saldaconto o se e' stata inserita
_cpg->put("CODTAB",codpag);
if (_cpg->read() != NOERR)
{
@ -1847,8 +1859,6 @@ error_type TContabilizzazione::add_spese_inbo(TDocumento& doc, const int ndec)
if (!sp_bolli.is_zero())
calculate_spese(sp_bolli, iva_sp_bolli, ndec, false, is_cli, doc.codiva_bolli(), doc);
return _error;
}
@ -2211,7 +2221,6 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
// Le righe omaggio senza addebito IVA vanno saltate
const bool riga_omaggio = tipo == RIGA_OMAGGI && r.get_bool(RDOC_ADDIVA);
if ((tipo != RIGA_DESCRIZIONI && tipo != RIGA_SCONTI && tipo != RIGA_RETTIFICHE) || riga_omaggio)
{
const bool spesa = r.tipo().tipo() == RIGA_SPESEDOC;
char tipo_rit = '\0';
@ -2360,7 +2369,6 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
// Compila le righe
error_type TContabilizzazione::compile_rows_mov_re(TDocumento& doc)
{
const int rows = doc.rows();
const int ndec = doc.decimals();
@ -2375,7 +2383,6 @@ error_type TContabilizzazione::compile_rows_mov_re(TDocumento& doc)
// Le righe omaggio senza addebito IVA vanno saltate
const bool riga_omaggio = tipo == RIGA_OMAGGI && r.get_bool(RDOC_ADDIVA);
if ((tipo != RIGA_DESCRIZIONI && tipo != RIGA_SCONTI && tipo != RIGA_RETTIFICHE) && !riga_omaggio)
{
TBill conto;
search_costo_ricavo(conto,r); // l'errore eventuale viene settato qui dentro
@ -2775,7 +2782,6 @@ error_type TContabilizzazione::write_all(TDocumento& doc, TMovimentoPN_VE & movi
TSaldo_agg saldo;
int err = NOERR;
const long old_numreg = doc_contabilized(doc, false);
if (old_numreg > 0)
{
TMovimentoPN oldmov;
@ -3787,8 +3793,8 @@ bool TContabilizzazione::prev_contabilized(const TDocumento& doc) const
const TString4 stato_doc = rec.get(DOC_STATO);
const TString4 stato_ok = stato_finale_doc_iniziale();
return stato_doc >= stato_ok;
return stato_doc >= stato_ok;
}
static bool link_handler(int n, const char* nreg)
@ -3842,7 +3848,6 @@ bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc
p.links().add("Movimento Analitico |r|w", 1);
p.setlinkhandler(link_handler);
_viswin = new TViswin(NULL, TR("Contabilizzazione documenti"), false, true, true);
_viswin->open_modal();
const clock_t start_time = clock();

View File

@ -95,7 +95,7 @@ void TDocumentoEsteso::summary_set_next()
TToken_string& codici = _order_array.row(_sum_filter-1);
const TString4 codiva(codici.get()); // Reperisce il prossimo codice nella lista. (son gia' ordinati per codice)
if (codiva.not_empty() && _summary_table.is_key(codiva))
if (codiva.full() && _summary_table.is_key(codiva))
{
// Estrae da _summary_table i dati relativio al codice corrispondente.
const TRiepilogo_iva& riep= (const TRiepilogo_iva&) _summary_table[codiva];

View File

@ -47,6 +47,28 @@ bool TOriginal_row_mask::on_key(KEY key)
}
class TOriginal_row_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
virtual bool on_key(KEY key);
public:
TOriginal_row_mask() : TAutomask("ve0100c") { }
};
bool TOriginal_row_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
return true;
}
bool TOriginal_row_mask::on_key(KEY key)
{
if (key == K_SHIFT + K_F12)
enable(-1);
return TAutomask::on_key(key);
}
TDocumento_mask::TDocumento_mask(const char* td)
: TVariable_mask(), _progs_page(-1),
@ -926,6 +948,7 @@ void TDocumento_mask::spese2mask()
spese.add(s);
}
doc().put("SPESEUPD", false);
doc().put(DOC_CODVAL, get(F_CODVAL));
doc().put(DOC_CAMBIO, get(F_CAMBIO));
doc().put(DOC_CONTROEURO, get(F_CONTROEURO));
@ -992,7 +1015,6 @@ void TDocumento_mask::mask2doc()
if (fr)
fr->write(f.get(), doc());
}
}
TVariable_mask* TDocumento_mask::riga_mask(int numriga)
@ -1043,6 +1065,9 @@ TVariable_mask* TDocumento_mask::riga_mask(int numriga)
const TCursor * cur = browse->cursor();
if (cur)
{
codmag = c.default_mag();
if (c.has_default_dep())
codmag << c.default_dep();
const int num = cur->file().num();
if (num == LF_ANAMAG || num == LF_CODCORR)
{
@ -1185,7 +1210,7 @@ TVariable_mask* TDocumento_mask::riga_mask(int numriga)
void TDocumento_mask::update_giacenza()
{
if (id2pos(F_CURGIAC)<0)
if (id2pos(F_CURGIAC)<0 || !is_running())
return;
TSheet_field& sf = sfield(F_SHEET);
@ -1236,25 +1261,13 @@ void TDocumento_mask::update_giacenza()
giac = art.disponibilita(annoes, codmag, livello, TRUE);
disp = art.disponibilita(annoes, codmag, livello, FALSE);
TLocalisamfile umart(LF_UMART);
umart.setkey(2);
umart.put(UMART_CODART, codart);
umart.put(UMART_UM, row.get(sf.cid2index(FR_UMQTA)));
if (umart.read() == NOERR)
{
real curr_fc = umart.get_real(UMART_FC);
if (curr_fc > ZERO)
{
giac /= curr_fc;
disp /= curr_fc;
}
}
const TString4 um = row.get(sf.cid2index(FR_UMQTA));
art.convert_to_um(giac, um);
art.convert_to_um(disp, um);
}
set(F_CURGIAC, giac.string());
set(F_CURDISP, disp.string());
}
///////////////////////////////////////////////////////////
@ -1362,7 +1375,6 @@ bool TDocumento_mask::ss_notify( TSheet_field& ss, int r, KEY key )
const bool on = rdoc.get(RDOC_DACODNUM).not_empty();
ss.sheet_mask().enable(DLG_USER, on);
}
return TRUE;
}
@ -2213,7 +2225,7 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll
break;
case F_ROWS:
if (e == fe_modify)
if (e == fe_modify && is_running())
{
TString id;
@ -2293,7 +2305,6 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll
break;
}
return TRUE;
}
int TElabora_mask::update_list()

View File

@ -81,6 +81,7 @@ bool numdocrif_hndl( TMask_field& field, KEY key )
}
return true;
}
bool totdoc_hndl( TMask_field& field, KEY key )
@ -102,7 +103,6 @@ bool totdoc_hndl( TMask_field& field, KEY key )
}
}
return true;
}
bool smart_hndl( TMask_field& field, KEY key )
@ -152,7 +152,6 @@ bool smart_hndl( TMask_field& field, KEY key )
}
return true;
}
bool ora_hndl( TMask_field& field, KEY key )
@ -175,7 +174,6 @@ bool ora_hndl( TMask_field& field, KEY key )
ora = field.get();
if (ora.not_empty())
{
if (!isdigit(ora[0]) ||
!isdigit(ora[1]) ||
!isdigit(ora[2]) ||
@ -269,9 +267,11 @@ bool note_hndl( TMask_field& f, KEY key )
}
}
}
return true;
}
// Handler per il calcolo delle date di pagamento
@ -296,11 +296,20 @@ bool data_hndl( TMask_field& field, KEY key )
if (!datadoc.ok())
return field.error_box("La data documento deve essere comunque indicata.");
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.");
const TCodice_numerazione codnum(m.get(F_CODNUM));
if (codnum.test_eser())
{
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))
@ -321,7 +330,6 @@ bool data_hndl( TMask_field& field, KEY key )
}
}
}
if (codnum.dont_test_datadoc())
return true; // Non devo fare altri test
@ -340,8 +348,8 @@ bool data_hndl( TMask_field& field, KEY key )
return field.error_box("Data documento inferiore alla data del documento precedente");
}
}
}
return true;
}
// handler delle righe
@ -364,6 +372,7 @@ void row_set_handler( TMask& m, const int field, const int index )
yesnofatal_box( false, "Funzione di handler sulla riga non definita( %d ).", index );
}
}
HIDDEN TString16 curr_um;
@ -558,6 +567,7 @@ bool tipo_riga_handler(TMask_field& f, KEY key)
}
bool codmag_handler( TMask_field& f, KEY key )
{
// if (f.to_check(key, true))
@ -618,6 +628,7 @@ bool codmag_coll_handler( TMask_field& f, KEY key )
}
void upd_colli_peso_tara(TMask& m, const TRectype& a)
{
// const real qta = m.get_real(FR_QTA) * curr_fc; // curr_fc puo' non essere inizializzata e vale -1
@ -650,6 +661,7 @@ void upd_colli_peso_tara(TMask& m, const TRectype& a)
const real peso = qta * a.get_real(ANAMAG_PESO);
m.fld(pos).set(peso.string());
}
}
@ -1032,6 +1044,340 @@ bool search_price_handler(TMask_field& f, KEY key )
}
static bool __in_handler = false;
int sort_sheet(const TObject** a, const TObject** b)
{
TToken_string * t1 = (TToken_string *) *a;
TToken_string * t2 = (TToken_string *) *b;
const char * a1 = t1->get(1);
const char * a2 = t2->get(1);
int cmp = strcmp(a1, a2);
if (cmp == 0)
{
TDate d1(t1->get(2));
TDate d2(t2->get(2));
cmp = d2 - d1;
if (cmp == 0)
return t2->get_int(8) - t1->get_int(8);
}
return cmp;
}
void search_price(TMask_field& f, KEY key )
{
TMask& row_mask = f.mask();
TSheet_field& sh = *row_mask.get_sheet();
TDocumento_mask& mask = (TDocumento_mask &)sh.mask();
TArray_sheet sheet(0, 3, -1, 16, "Ricerca Prezzi",
"N.ro doc.|Codice articolo@20|Data@10|Prezzo@18P|Quantità|Sconto@10|Numerazione@18|Tipo Documento@18", 0, 1);
TString_array & el = sheet.rows_array();
TString form;
TRelation * rel = new TRelation(LF_DOC);
TRectype from(rel->curr());
TRectype to(rel->curr());
TDate datadoc = mask.get_date(F_DATADOC);
const long codcf = mask.get_long(F_CODCF);
const TString16 numdoc(mask.get(F_NDOC));
const int last_anno = mask.get_int(F_ANNO);
const int current_doc_row = sh.selected() + 1;
const int first_anno = last_anno - ((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_years();
TToken_string nums(((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_nums());
const TString& tipocf = mask.get(F_TIPOCF);
from.put(DOC_TIPOCF, tipocf);
to.put(DOC_TIPOCF, tipocf);
from.put(DOC_CODCF, codcf);
to.put(DOC_CODCF, codcf);
from.put(DOC_PROVV, "D");
to.put(DOC_PROVV, "D");
from.put(DOC_ANNO, first_anno);
to.put(DOC_ANNO, last_anno);
to.put(DOC_DATADOC, datadoc);
if (nums.empty())
nums = mask.get(F_CODNUM);
TString8 first_num(nums.get(0));
TString8 last_num(first_num);;
form << "((CODNUM==\"" << first_num << "\")";
for (const char * s = nums.get(); s && *s; s = nums.get())
{
if (first_num > s)
first_num = s;
if (last_num < s)
last_num = s;
form << "||(CODNUM==\"" << s << "\")";
}
form << ")";
TCursor cur(rel, form, 2, &from, &to);
const int items = cur.items();
cur.freeze();
TRecord_array r(LF_RIGHEDOC, RDOC_NRIGA);
TRectype rec(LF_RIGHEDOC);
for(cur = 0L; cur.pos() < items; ++cur)
{
const TString16 data(cur.curr().get(DOC_DATADOC));
const TString80 num(cache().get("%NUM", cur.curr().get(DOC_CODNUM), "S0"));
const TString80 tipo(cache().get("%TIP", cur.curr().get(DOC_TIPODOC), "S0"));
rec.zero();
rec.put(RDOC_PROVV, cur.curr().get(DOC_PROVV));
rec.put(RDOC_ANNO, cur.curr().get(DOC_ANNO));
rec.put(RDOC_CODNUM, cur.curr().get(DOC_CODNUM));
rec.put(RDOC_NDOC, cur.curr().get(DOC_NDOC));
r.read(rec);
int last_row = r.last_row();
for (int i = r.first_row(); i <= last_row; i = r.succ_row(i))
{
const TRectype & rdoc = r.row(i);
const TString & codart = rdoc.get(RDOC_CODART);
if (codart.not_empty())
{
TToken_string row;
row.add(rdoc.get(RDOC_NDOC));
row.add(codart);
row.add(data);
row.add(rdoc.get(RDOC_PREZZO));
row.add(rdoc.get(RDOC_QTA));
row.add(rdoc.get(RDOC_SCONTO));
row.add(num);
row.add(tipo);
row.add(rdoc.get(RDOC_NRIGA));
el.add(row);
}
}
}
el.TArray::sort(sort_sheet);
const int max_rows = ((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).max_rows_art();
if (max_rows > 0)
{
const int items = el.items();
TString80 last_cod;
long last_doc = 0L;
real last_price(ZERO);
int count = 0;
for (int i = 0 ; i < items; i++)
{
const TString & codart = el.row(i).get(1);
long ndoc = el.row(i).get_long(0);
real price(el.row(i).get(3));
if (codart != last_cod)
{
last_cod = codart;
last_doc = ndoc;
last_price = price;
count = 1;
}
else
{
if (ndoc == last_doc && price == last_price)
{
el.destroy(i);
}
else
{
last_doc = ndoc;
last_price = price;
count++;
if (count > max_rows)
el.destroy(i);
}
}
}
el.pack();
}
if (sheet.run() == K_ENTER)
{
__in_handler = true;
const TString & xx = sheet.row(-1).get(3);
row_mask.set(FR_PREZZO, xx);
const TString & codart_sel = sheet.row(-1).get(1);
row_mask.set(FR_CODART, codart_sel, 3);
row_mask.field(FR_CODART).set_dirty(false);
const TString & prezzo = sheet.row(-1).get(3);
row_mask.set(FR_PREZZO, prezzo);
const TString & sconto = sheet.row(-1).get(5);
row_mask.set(FR_SCONTO, sconto);
__in_handler = false;
}
}
void search_price_article(TMask_field& f, KEY key )
{
TMask& row_mask = f.mask();
TSheet_field& sh = *row_mask.get_sheet();
TDocumento_mask& mask = (TDocumento_mask &)sh.mask();
const int current_doc_row = sh.selected() + 1;
const TString16 numdoc(mask.get(F_NDOC));
const TString80 codart(row_mask.get(FR_CODART));
TDate datadoc = mask.get_date(F_DATADOC);
const char tipocf = mask.get(F_TIPOCF)[0];
const TString16 codcf = mask.get(F_CODCF);
TToken_string nums(((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_nums());
if (nums.empty())
nums = mask.get(F_CODNUM);
TString8 first_num(nums.get(0));
TString8 last_num(first_num);;
TString form;
form << "(33->TIPOCF==\"" << tipocf << "\")&&(33->CODCF==\"" << (const char *)codcf << "\")&&(ANSI(33->DATADOC)<=\"" << datadoc.string(ANSI) << "\")" << "&&((CODNUM==\"" << first_num << "\")";
for (const char * s = nums.get(); s && *s; s = nums.get())
{
if (first_num > s)
first_num = s;
if (last_num < s)
last_num = s;
form << "||(CODNUM==\"" << s << "\")";
}
form << ")";
TRelation rel(LF_RIGHEDOC);
TRectype from(rel.curr());
TRectype to(rel.curr());
rel.add(LF_DOC, "PROVV==PROVV|ANNO=ANNO|CODNUM==CODNUM|NDOC==NDOC");
const int last_anno = mask.get_int(F_ANNO);
const int first_anno = last_anno - ((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_years();
from.put(RDOC_CODART, codart);
from.put(RDOC_CODNUM, first_num);
from.put(RDOC_ANNO, first_anno);
from.put(RDOC_PROVV, "D");
to.put(RDOC_CODART, codart);
to.put(RDOC_CODNUM, last_num);
to.put(RDOC_ANNO, last_anno);
to.put(RDOC_PROVV, "D");
TSorted_cursor cur(&rel, "33->DATADOC-|CODNUM|NDOC-", form, 5, &from, &to);
cur.items();
cur.freeze();
cur.relation()->add("%NUM", "CODTAB==CODNUM", 1, 0, 201);
cur.relation()->add("%TIP", "CODTAB==TIPODOC", 1, LF_DOC, 202);
TCursor_sheet sheet(&cur, "NDOC|CODART|33->DATADOC|PREZZO|QTA|SCONTO|-201->S0|-202->S0",
"Ricerca Prezzi",
"N.ro doc.|Codice articolo@20|Data@10|Prezzo@18P|Quantità|Sconto@10|Numerazione@18|Tipo Documento@18",
0, 4);
sheet.add_string (101, 0, "Codice Articolo ", 2, 1, 20, "D");
sheet.add_string (102, 0, "Descrizione ", 2, 3, 50, "D");
sheet.set(101, codart);
sheet.set(102, cache().get(LF_ANAMAG, codart, "DESCR"));
if (sheet.run() == K_ENTER)
{
__in_handler = true;
row_mask.set(FR_CODART, codart, 3);
row_mask.field(FR_CODART).set_dirty(false);
__in_handler = false;
const TString & prezzo = sheet.row(-1).get(3);
row_mask.set(FR_PREZZO, prezzo);
const TString & sconto = sheet.row(-1).get(5);
row_mask.set(FR_SCONTO, sconto);
}
}
bool search_price_handler(TMask_field& f, KEY key )
{
TMask& row_mask = f.mask();
TSheet_field& sh = *row_mask.get_sheet();
if (key == K_F8 && !sh.sheet_mask().is_running())
{
const TString & codart = row_mask.get(FR_CODART);
if (codart.empty())
search_price(f, key);
else
search_price_article(f,key);
return true;
}
else
if ((key == K_TAB && f.focusdirty()))
{
TDocumento_mask& mask = (TDocumento_mask &)sh.mask();
const TString80 codart(row_mask.get(FR_CODART));
if (!__in_handler && codart.not_empty() && row_mask.get(FR_PREZZO).empty())
{
TDate datadoc = mask.get_date(F_DATADOC);
const char tipocf = mask.get(F_TIPOCF)[0];
const TString16 codcf = mask.get(F_CODCF);
const int current_doc_row = sh.selected() + 1;
TToken_string nums(((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_nums());
if (nums.empty())
nums = mask.get(F_CODNUM);
TString8 first_num(nums.get(0));
TString8 last_num(first_num);;
TString form;
form << "(33->TIPOCF==\"" << tipocf << "\")&&(33->CODCF==\"" << (const char *)codcf << "\")&&(ANSI(33->DATADOC)<=\"" << datadoc.string(ANSI) << "\")" << "&&((CODNUM==\"" << first_num << "\")";
for (const char * s = nums.get(); s && *s; s = nums.get())
{
if (first_num > s)
first_num = s;
if (last_num < s)
last_num = s;
form << "||(CODNUM==\"" << s << "\")";
}
form << ")";
TRelation rel(LF_RIGHEDOC);
TRectype from(rel.curr());
TRectype to(rel.curr());
rel.add(LF_DOC, "PROVV==PROVV|ANNO=ANNO|CODNUM==CODNUM|NDOC==NDOC");
const int last_anno = mask.get_int(F_ANNO);
const int first_anno = last_anno - ((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_years();
from.put(RDOC_CODART, codart);
from.put(RDOC_CODNUM, first_num);
from.put(RDOC_ANNO, first_anno);
from.put(RDOC_PROVV, "D");
to.put(RDOC_CODART, codart);
to.put(RDOC_CODNUM, last_num);
to.put(RDOC_ANNO, last_anno);
to.put(RDOC_PROVV, "D");
TSorted_cursor cur(&rel, "33->DATADOC-|CODNUM|NDOC-", "", 5, &from, &to);
cur.setfilter(form, true);
if (cur.items() > 0L)
{
cur = 0L;
__in_handler = true;
row_mask.set(FR_CODART, codart, 3);
row_mask.field(FR_CODART).set_dirty(false);
__in_handler = false;
const TString & prezzo = cur.curr().get(RDOC_PREZZO);
row_mask.set(FR_PREZZO, prezzo);
const TString & sconto = cur.curr().get(RDOC_SCONTO);
row_mask.set(FR_SCONTO, sconto);
}
}
}
return codart_handler( f, key);
}
bool codart_handler(TMask_field& f, KEY key )
{
TMask& row_mask = f.mask();
@ -1127,12 +1473,15 @@ bool codart_handler(TMask_field& f, KEY key )
}
}
const TString& descest = anamag.get("DESCRAGG");
if (descest.not_empty())
desc << "\n" << descest;
if (!mask.doc()[current_doc_row].tipo().no_desc())
row_mask.set(FR_DESCR, desc);
TString80 key; key << codart << "|1";
const TRectype& umart = cache().get(LF_UMART, key);
if (!umart.empty())
@ -1164,14 +1513,17 @@ bool codart_handler(TMask_field& f, KEY key )
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(TR("Articolo %s sospeso, quindi non movimentabile"), (const char *)codart);
}
@ -1271,9 +1623,11 @@ bool codart_handler(TMask_field& f, KEY key )
}
mask.update_giacenza();
}
return true;
}
bool codartmag_handler( TMask_field& f, KEY key )
{
TMask & m = f.mask();
@ -1344,6 +1698,7 @@ bool liv_handler( TMask_field& f, KEY key )
r.put(MAG_LIVELLO, liv);
TRectype new_rec(r);
if (fl.read() != NOERR)
{
@ -1506,7 +1861,6 @@ bool um_handler( TMask_field& f, KEY key )
curr_fc = fc;
}
return true;
}
bool descr_handler( TMask_field& f, KEY key )
@ -1523,7 +1877,6 @@ bool descr_handler( TMask_field& f, KEY key )
}
}
return true;
}
bool qtaart_handler( TMask_field& f, KEY key )
@ -1563,6 +1916,7 @@ bool qtaart_handler( TMask_field& f, KEY key )
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));
@ -1613,8 +1967,7 @@ bool qtaart_handler( TMask_field& f, KEY key )
}
}
return qta_handler(f, key);
}
}
bool qta_handler( TMask_field& f, KEY key )
{
@ -1635,7 +1988,6 @@ bool qta_handler( TMask_field& f, KEY key )
}
return true;
}
bool qta_evasa_handler( TMask_field& f, KEY key )
@ -1661,7 +2013,6 @@ bool qta_evasa_handler( TMask_field& f, KEY key )
}
}
return true;
}
bool causmag_handler( TMask_field& f, KEY key )
@ -1672,6 +2023,7 @@ bool causmag_handler( TMask_field& f, KEY key )
TDocumento_mask& mask = (TDocumento_mask &) row_mask.get_sheet()->mask();
TString4 causmag(f.get());
if (causmag.blank())
causmag = mask.get(F_CAUSMAG);
if (causmag.full())
{
@ -1720,7 +2072,6 @@ bool causmag_handler( TMask_field& f, KEY key )
}
}
return true;
}
bool sppr_handler( TMask_field& f, KEY key )
@ -1815,7 +2166,6 @@ bool sppr_handler( TMask_field& f, KEY key )
}
}
return true;
}
bool TDocumento_mask::numdocrif_search_handler(TMask_field& f, KEY key)
@ -1853,7 +2203,6 @@ bool TDocumento_mask::numdocrif_search_handler(TMask_field& f, KEY key)
}
}
return true;
}
bool TDocumento_mask::ragsoc_search_handler(TMask_field& f, KEY key)
@ -1898,6 +2247,7 @@ bool TDocumento_mask::ragsoc_search_handler(TMask_field& f, KEY key)
return true;
}
bool TDocumento_mask::datadocrif_handler(TMask_field& f, KEY key)
{
if (key == K_ENTER && f.empty())
@ -1926,7 +2276,6 @@ bool link_handler( TMask_field& f, KEY key )
r.edit(LF_DOC, "DAPROVV|DAANNO|DACODNUM|DANDOC");
}
return true;
}
bool ca_mag_handler(TMask_field& f, bool cdc = true)