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:
parent
c434cad322
commit
cd80466f09
@ -1,3 +1,3 @@
|
||||
34
|
||||
0
|
||||
$rdoc|||513|31|Righe documenti di vendita|NDOC*3||
|
||||
$rdoc|||520|31|Righe documenti di vendita|NDOC*3||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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|
|
||||
|
@ -188,6 +188,8 @@ Col(25) = FR_TIPORIGA
|
||||
|
||||
[RIGHE]
|
||||
|
||||
[DEFAULT]
|
||||
|
||||
[HANDLERS]
|
||||
|
||||
[PROFILOGRUPPO]
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -294,6 +294,7 @@ int TLista_clifo::add(long cod)
|
||||
return pos;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////
|
||||
// TFatturazione_bolle_app
|
||||
///////////////////////////////////////////////////////////
|
||||
|
@ -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)
|
||||
|
@ -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"
|
||||
|
@ -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>
|
||||
|
@ -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 "
|
||||
|
995
ve/velib.h
995
ve/velib.h
File diff suppressed because it is too large
Load Diff
@ -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");
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -170,7 +170,6 @@ int TLista_documenti::write(bool re) const
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
// TParametri_elaborazione
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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];
|
||||
|
@ -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()
|
||||
|
379
ve/velib06a.cpp
379
ve/velib06a.cpp
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user