git-svn-id: svn://10.65.10.50/branches/R_10_00@23160 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
5a6ba3428f
commit
04a1ce4267
@ -679,7 +679,7 @@ bool TMotore_application::user_create( )
|
||||
_msk->set_handler(F_ANNO, TDocumento_mask::anno_handler);
|
||||
_msk->set_handler(F_CODNUM, TDocumento_mask::num_handler);
|
||||
_msk->set_handler(F_NUMDOCRIF, TDocumento_mask::numdocrif_search_handler);
|
||||
_msk->set_handler(F_RAGSOCSEARCH, TDocumento_mask::ragsoc_search_handler);
|
||||
//_msk->set_handler(F_RAGSOCSEARCH, TDocumento_mask::ragsoc_search_handler);
|
||||
_msk->set_handler(F_NDOC, ndoc_handler);
|
||||
|
||||
const int args = argc() ;
|
||||
|
@ -159,12 +159,23 @@ END
|
||||
NUMBER F_CODCF 6
|
||||
BEGIN
|
||||
PROMPT 24 8 "Codice "
|
||||
|
||||
/*
|
||||
USE LF_DOC KEY 2 SELECT (CODNUM==#F_CODNUM)&&(PROVV==#F_PROVV)&&(ANNO==#F_ANNO)&&((#F_STATO=="")||(STATO==#F_STATO))
|
||||
JOIN LF_CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF
|
||||
INPUT TIPOCF F_TIPOCF SELECT
|
||||
INPUT CODCF F_CODCF
|
||||
INPUT CODCF F_CODCF SELECT
|
||||
INPUT PROVV F_PROVV
|
||||
INPUT ANNO F_ANNO
|
||||
*/
|
||||
|
||||
USE LF_DOC SELECT (TIPOCF==#F_TIPOCF)&&((#F_CODCF="")||(CODCF==#F_CODCF))&&((#F_STATO=="")||(STATO==#F_STATO))
|
||||
BY LF_CLIFO->CODCF NDOC
|
||||
JOIN LF_CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF
|
||||
INPUT PROVV F_PROVV SELECT
|
||||
INPUT ANNO F_ANNO SELECT
|
||||
INPUT CODNUM F_CODNUM SELECT
|
||||
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
|
||||
DISPLAY "Partita IVA@12" LF_CLIFO->PAIV
|
||||
@ -174,10 +185,9 @@ BEGIN
|
||||
DISPLAY "Tipo" TIPODOC
|
||||
DISPLAY "N.Doc. " NDOC
|
||||
DISPLAY "Stato@R" STATO
|
||||
DISPLAY "Data\ndocumento" DATADOC
|
||||
DISPLAY "Data\ndocumento@10" DATADOC
|
||||
DISPLAY "Valuta" CODVAL
|
||||
DISPLAY "Totale\ndocumento@18V" G1:TOTDOC
|
||||
DISPLAY "Stato" STATO
|
||||
COPY OUTPUT F_NDOC
|
||||
OUTPUT F_CODCF CODCF
|
||||
CHECKTYPE NORMAL
|
||||
@ -193,7 +203,16 @@ END
|
||||
STRING F_RAGSOCSEARCH 50
|
||||
BEGIN
|
||||
PROMPT 2 9 "Ragione Sociale "
|
||||
FLAGS "B"
|
||||
USE LF_DOC SELECT (TIPOCF==#F_TIPOCF)&&(LF_CLIFO->RAGSOC?=(#F_RAGSOCSEARCH+"*"))&&((#F_STATO=="")||(STATO==#F_STATO))
|
||||
BY LF_CLIFO->RAGSOC NDOC
|
||||
JOIN LF_CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF
|
||||
INPUT PROVV F_PROVV SELECT
|
||||
INPUT ANNO F_ANNO SELECT
|
||||
INPUT CODNUM F_CODNUM SELECT
|
||||
COPY DISPLAY F_CODCF
|
||||
COPY OUTPUT F_NDOC
|
||||
OUTPUT F_CODCF CODCF
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
@ -49,3 +49,7 @@
|
||||
: MESSAGE_LV_DOT ( s1 -- )
|
||||
DOC_LV_DOT \ user defined word in ve1.exe
|
||||
;
|
||||
|
||||
: MESSAGE_ADD_ROW ( s1 s2 s3 -- )
|
||||
DOC_ADD_ROW \ user defined word in ve1.exe
|
||||
;
|
187
ve/ve1300.cpp
187
ve/ve1300.cpp
@ -48,10 +48,13 @@ public:
|
||||
|
||||
TRiga_documento& TDoc_recordset::riga_doc(int n) const
|
||||
{
|
||||
if (n < 0 || n > _doc->rows()) // Non dovrebbe succedere mai
|
||||
{
|
||||
n = _doc->new_row("05").numero(); // Crea una riga descrizione fittizia
|
||||
((TDoc_recordset*)this)->_lastpos++;
|
||||
}
|
||||
if (n <= 0)
|
||||
n = _mypos+1;
|
||||
if (n > _doc->rows()) // Non dovrebbe succedere mai
|
||||
n = _doc->new_row("05").get_int(RDOC_NRIGA); // Crea ua riga descrizione fittizia
|
||||
if (n <= 0)
|
||||
n = 1;
|
||||
return _doc->row(n);
|
||||
@ -283,6 +286,8 @@ protected:
|
||||
virtual bool get_usr_val(const TString& name, TVariant& var) const;
|
||||
virtual bool set_usr_val(const TString& name, const TVariant& var);
|
||||
|
||||
TVariant eval_rdoc(const TRiga_documento& rdoc, const TString& formula, TFieldtypes ft) const;
|
||||
|
||||
TDocumentoEsteso& doc();
|
||||
TRiga_documento& riga_doc(int n = 0);
|
||||
void output_values(const TRectype& rec, const TString& output);
|
||||
@ -295,6 +300,7 @@ protected:
|
||||
bool msg_scadenze(TVariant_stack& stack);
|
||||
bool msg_tot_imponibili(TVariant_stack& stack);
|
||||
bool msg_lv_dot(TVariant_stack& stack);
|
||||
bool msg_add_row(TVariant_stack& stack);
|
||||
|
||||
int set_printed_status(TDocumento& doc) const;
|
||||
|
||||
@ -796,6 +802,104 @@ bool TReport_doc::msg_lv_dot(TVariant_stack& stack)
|
||||
return true;
|
||||
}
|
||||
|
||||
TVariant TReport_doc::eval_rdoc(const TRiga_documento& rdoc, const TString& formula, TFieldtypes ft) const
|
||||
{
|
||||
TExpr_documento expr(formula, _strexpr, &rdoc.doc(), &rdoc);
|
||||
for (int v = expr.numvar()-1; v >= 0; v--)
|
||||
{
|
||||
const TFixed_string fld = expr.varname(v);
|
||||
if (rdoc.TRectype::exist(fld))
|
||||
expr.setvar(fld, rdoc.get(fld));
|
||||
else
|
||||
{
|
||||
TVariant var;
|
||||
if (get_usr_val(fld, var))
|
||||
expr.setvar(fld, var.as_string());
|
||||
}
|
||||
}
|
||||
TVariant tmp;
|
||||
switch (ft)
|
||||
{
|
||||
case _boolfld: tmp.set(expr.as_bool()); break;
|
||||
case _realfld: tmp.set(expr.as_real()); break;
|
||||
default : tmp.set(expr.as_string()); break;
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
bool TReport_doc::msg_add_row(TVariant_stack& stack)
|
||||
{
|
||||
TString4 row_type;
|
||||
TString codart_expr;
|
||||
TString descr_expr;
|
||||
TToken_string sum_fields;
|
||||
|
||||
for (int v = 0; !stack.empty(); v++)
|
||||
{
|
||||
const TString& riga = stack.pop().as_string();
|
||||
switch (v)
|
||||
{
|
||||
case 0: row_type.strncpy(riga, 2); break;
|
||||
case 1: codart_expr = riga; break;
|
||||
case 2: descr_expr = riga; break;
|
||||
default: sum_fields.add(riga); break;
|
||||
}
|
||||
}
|
||||
|
||||
TRiga_documento& curr_rdoc = riga_doc(0);
|
||||
if (curr_rdoc.get(RDOC_TIPORIGA) == row_type)
|
||||
return false; // Riga generata
|
||||
|
||||
const TCodice_articolo codart = eval_rdoc(curr_rdoc, codart_expr, _alfafld).as_string();
|
||||
const int curr_riga = curr_rdoc.numero();
|
||||
const int last_riga = doc().physical_rows();
|
||||
int good_riga = 0;
|
||||
for (int i = last_riga; i > curr_riga; i--)
|
||||
{
|
||||
const TRiga_documento& rdoc = riga_doc(i);
|
||||
if (rdoc.get(RDOC_TIPORIGA) == row_type && rdoc.get(RDOC_CODART) == codart)
|
||||
{
|
||||
good_riga = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (good_riga <= curr_riga) // Nessuna riga compatibile
|
||||
{
|
||||
// Aggiungi riga vuota, se necessario
|
||||
const TRiga_documento& urdoc = riga_doc(last_riga);
|
||||
if (urdoc.get(RDOC_TIPORIGA) != row_type)
|
||||
{
|
||||
TRiga_documento& empty_rdoc = riga_doc(-1);
|
||||
empty_rdoc.put(RDOC_TIPORIGA, row_type);
|
||||
}
|
||||
|
||||
// Crea nuova riga ragggruppamento
|
||||
TRiga_documento& new_rdoc = riga_doc(-1);
|
||||
new_rdoc.put(RDOC_TIPORIGA, row_type);
|
||||
new_rdoc.put(RDOC_CODART, codart);
|
||||
good_riga = new_rdoc.numero();
|
||||
}
|
||||
|
||||
TRiga_documento& good_rdoc = riga_doc(good_riga);
|
||||
FOR_EACH_TOKEN(sum_fields, fld)
|
||||
good_rdoc.add(fld, curr_rdoc.get_real(fld));
|
||||
|
||||
int open_brace = 0;
|
||||
while ((open_brace = descr_expr.find('{')) >=0)
|
||||
{
|
||||
const int close_brace = descr_expr.find('}', open_brace);
|
||||
if (close_brace < 0) break;
|
||||
const TString& varname = descr_expr.sub(open_brace+1, close_brace);
|
||||
TFieldtypes ft = curr_rdoc.type(varname); if (ft == _nullfld) ft = _alfafld;
|
||||
TVariant var = eval_rdoc(good_rdoc, varname, ft);
|
||||
const TString& after = descr_expr.mid(close_brace+1);
|
||||
descr_expr.cut(open_brace)<< var.as_string() << after;
|
||||
}
|
||||
good_rdoc.set_descr(descr_expr);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
size_t TReport_doc::get_usr_words(TString_array& words) const
|
||||
{
|
||||
TReport::get_usr_words(words);
|
||||
@ -808,6 +912,7 @@ size_t TReport_doc::get_usr_words(TString_array& words) const
|
||||
"DOC_SCADENZE",
|
||||
"DOC_TOT_IMPONIBILI",
|
||||
"DOC_LV_DOT",
|
||||
"DOC_ADD_ROW",
|
||||
NULL
|
||||
};
|
||||
|
||||
@ -834,6 +939,7 @@ bool TReport_doc::execute_usr_word(unsigned int opcode, TVariant_stack& stack)
|
||||
case 4: msg_scadenze(stack); break;
|
||||
case 5: msg_tot_imponibili(stack); break;
|
||||
case 6: msg_lv_dot(stack); break;
|
||||
case 7: msg_add_row(stack); break;
|
||||
default: ok = false; break;
|
||||
}
|
||||
stack.reset(); // Svuota eventuali parametri variabili inutilizzati
|
||||
@ -923,6 +1029,20 @@ bool TReport_doc_mask::on_field_event(TOperable_field& o, TField_event e, long j
|
||||
set(F_A_NDOC, dal);
|
||||
}
|
||||
break;
|
||||
case DLG_CONFIG:
|
||||
if (e == fe_button)
|
||||
{
|
||||
TMask m("ba0100m");
|
||||
TConfig cfg(CONFIG_USER, "Mail");
|
||||
FOR_EACH_MASK_FIELD(m, i, f) if (f->field())
|
||||
f->set(f->field()->read(cfg, "Mail"));
|
||||
if (m.run() == K_ENTER)
|
||||
{
|
||||
FOR_EACH_MASK_FIELD(m, i, f) if (f->field())
|
||||
f->field()->write(cfg, "Mail", f->get());
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -937,8 +1057,11 @@ TReport_doc_mask::TReport_doc_mask() : TAutomask("ve1300a")
|
||||
TApplication& a = main_app();
|
||||
const bool can_pdf = a.has_module(RSAUT);
|
||||
const bool can_sign = can_pdf && a.has_module(FDAUT);
|
||||
enable(DLG_EMAIL, can_pdf);
|
||||
enable(DLG_SIGNMAIL, can_sign);
|
||||
const int mail_client = xvt_mail_installed();
|
||||
const bool can_mail = can_pdf && mail_client != 0;
|
||||
enable(DLG_EMAIL, can_mail);
|
||||
enable(DLG_SIGNMAIL, can_mail && can_sign);
|
||||
enable(DLG_CONFIG, can_mail && (mail_client & 0x2) != 0);
|
||||
enable(DLG_PDF, can_pdf);
|
||||
enable(DLG_SIGNPDF, can_sign);
|
||||
}
|
||||
@ -1079,7 +1202,7 @@ bool TReport_doc_app::get_next_mail(TToken_string& to, TToken_string& cc, TToken
|
||||
ok = get_mail_address(to, cc);
|
||||
if (ok)
|
||||
{
|
||||
TDocumento doc('D', _anno, _codnum, _ndoc);
|
||||
const TDocumento doc('D', _anno, _codnum, _ndoc);
|
||||
doc.riferimento(subj);
|
||||
if (subj.blank())
|
||||
{
|
||||
@ -1087,7 +1210,26 @@ bool TReport_doc_app::get_next_mail(TToken_string& to, TToken_string& cc, TToken
|
||||
subj << ' ' << _ndoc << TR(" del ") << doc.get(DOC_DATADOC)
|
||||
<< ' ' << prefix().firm().ragione_sociale();
|
||||
}
|
||||
text << TR("Invio documento ") << subj;
|
||||
TString saluti = esc(ini_get_string(CONFIG_USER, "Mail", "Signature"));
|
||||
if (saluti.full())
|
||||
{
|
||||
if (saluti.find('\n')<0 && fexist(saluti))
|
||||
{
|
||||
TScanner s(saluti);
|
||||
while (!s.eof())
|
||||
text << s.line() << '\n';
|
||||
}
|
||||
else
|
||||
text << saluti << '\n';
|
||||
}
|
||||
else
|
||||
{
|
||||
text << TR("Cordiali Saluti");
|
||||
if (user() != dongle().administrator())
|
||||
text << " " << cache().get(LF_USER, user(), "USERDESC");
|
||||
text << ' ' << prefix().firm().ragione_sociale();
|
||||
}
|
||||
text.trim();
|
||||
if (to.full())
|
||||
ui &= ~0x1; // No user interface
|
||||
ui |= 0x2; // Query receipt
|
||||
@ -1196,7 +1338,7 @@ bool TReport_doc_app::nome_report(const TRecordset& doc, int quale, TFilename& p
|
||||
}
|
||||
|
||||
|
||||
bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_definitive)
|
||||
bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool final_print)
|
||||
{
|
||||
const int docs = doc.items();
|
||||
if (docs <= 0)
|
||||
@ -1229,8 +1371,9 @@ bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_def
|
||||
"Rispondendo NO verranno solo salvati gli allegati."));
|
||||
}
|
||||
|
||||
if (docs > 0)
|
||||
{
|
||||
const bool mail_requested = (mode == out_mail || mode == out_signed_mail);
|
||||
|
||||
TProgress_monitor pi(docs, TR("Elaborazione documenti..."));
|
||||
for (short loop = mail_requested ? 0 : 1; loop < 2; loop++)
|
||||
{
|
||||
@ -1247,12 +1390,13 @@ bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_def
|
||||
const TString4 tipodoc = doc.get(DOC_TIPODOC).as_string();
|
||||
const TTipo_documento& tipo = cached_tipodoc(tipodoc);
|
||||
|
||||
bool arc = false;
|
||||
if (is_definitive)
|
||||
{
|
||||
if (doc.get(DOC_STATO).as_string()[0] == tipo.stato_finale_stampa())
|
||||
const bool final_doc = doc.get(DOC_STATO).as_string()[0] >= tipo.stato_finale_stampa();
|
||||
if (final_print && final_doc)
|
||||
continue; // Evita lavoro inutile!
|
||||
|
||||
bool arc = false;
|
||||
if (final_print || final_doc)
|
||||
{
|
||||
const TString4 codnum = doc.get(DOC_CODNUM).as_string();
|
||||
const TCodice_numerazione& cn = cached_numerazione(codnum);
|
||||
arc = cn.auto_archive();
|
||||
@ -1273,7 +1417,7 @@ bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_def
|
||||
if (!paperless)
|
||||
{
|
||||
copies = _msk->get_int(F_NCOPIE);
|
||||
if (copies <= 0 && is_definitive)
|
||||
if (copies <= 0 && final_print)
|
||||
copies = tipo.ncopie();
|
||||
if (copies <= 0)
|
||||
copies = 1;
|
||||
@ -1285,7 +1429,7 @@ bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_def
|
||||
if (mail_loop)
|
||||
{
|
||||
mail_book = new TDoc_book;
|
||||
if (!report.print(doc, *mail_book, is_definitive, 1, true, false, false)) // Non archiviare per ora...
|
||||
if (!report.print(doc, *mail_book, final_print, 1, true, false, false)) // Non archiviare per ora...
|
||||
break;
|
||||
if (arc) // ... eventualemte archivia direttamente il book senza passare per uno temporaneo
|
||||
mail_book->archive(NULL, signature);
|
||||
@ -1301,7 +1445,7 @@ bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_def
|
||||
{
|
||||
if (print_loop)
|
||||
{
|
||||
if (!report.print(doc, book, is_definitive, copies, true, arc, signature))
|
||||
if (!report.print(doc, book, final_print, copies, true, arc, signature))
|
||||
break;
|
||||
if (!paperless)
|
||||
print_extra_copies(report, doc, book, copies);
|
||||
@ -1365,8 +1509,12 @@ bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_def
|
||||
if (ok && attach_mail) // Ho chiesto la spedizione vera e propria
|
||||
{
|
||||
ok = spotlite_send_mail(attachment);
|
||||
if (is_tmp)
|
||||
attachment.fremove();
|
||||
// Per ora non cancellare allegati mailsend.exe potrebbe non aver finito di scriverli 14/07/2015
|
||||
// if (is_tmp) attachment.fremove();
|
||||
TString mesg; mesg << "Invio allegato " << attachment;
|
||||
if (!ok) mesg << " NON";
|
||||
mesg << " riuscito";
|
||||
mail_log.log(0, mesg);
|
||||
}
|
||||
}
|
||||
delete mail_book;
|
||||
@ -1374,6 +1522,7 @@ bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_def
|
||||
}
|
||||
}
|
||||
}
|
||||
} // if docs > 0
|
||||
|
||||
if (book.pages() > 0)
|
||||
{
|
||||
@ -1464,7 +1613,7 @@ void TReport_doc_app::print_trans(const char* ininame)
|
||||
TConfig ini(ininame, "Transaction");
|
||||
a = ini.get("Action")[0]; // Stampa, Anteprima, Pdf, ...
|
||||
m = ini.get("Mode")[0]; // Definitivo o Provvisori
|
||||
_no_print_dlg = ini.get_bool("NoPrintDlg");
|
||||
_no_print_dlg = ini.get_bool("NoPrintDlg"); // Nascondi GUI di stampa
|
||||
}
|
||||
const TOutput_mode mode = key2mode(a);
|
||||
const bool is_definitive = m == 'D';
|
||||
@ -1499,7 +1648,7 @@ TReport_doc_app::TOutput_mode TReport_doc_app::key2mode(KEY k) const
|
||||
|
||||
void TReport_doc_app::main_loop()
|
||||
{
|
||||
_no_print_dlg = false;
|
||||
_no_print_dlg = false; // Normalmente mostra la GUI di stampa
|
||||
const int a = argc();
|
||||
if (a > 2)
|
||||
{
|
||||
|
@ -42,6 +42,12 @@ BEGIN
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BUTTON DLG_CONFIG 10 2
|
||||
BEGIN
|
||||
PROMPT 7 1 "~Imposta"
|
||||
PICTURE TOOL_CONFIG
|
||||
END
|
||||
|
||||
BUTTON DLG_NULL 10 2
|
||||
BEGIN
|
||||
PROMPT 7 1 ""
|
||||
@ -131,8 +137,10 @@ BEGIN
|
||||
INPUT NDOC F_DA_NDOC
|
||||
DISPLAY "Data@10" DATADOC
|
||||
DISPLAY "Numero@7" NDOC
|
||||
DISPLAY "Stato" STATO
|
||||
DISPLAY "Cliente/Fornitore@40" 20->RAGSOC
|
||||
DISPLAY "Comune@20" 13->DENCOM
|
||||
DISPLAY "E-Mail per fatture@40" 20->DOCMAIL
|
||||
OUTPUT F_DA_NDOC NDOC
|
||||
GROUP 1
|
||||
ADD RUN ve0 -0
|
||||
@ -274,6 +282,13 @@ BEGIN
|
||||
FLAG "P"
|
||||
END
|
||||
|
||||
STRING DLG_PROFILE 260
|
||||
BEGIN
|
||||
PROMPT 1 -1 "Profilo "
|
||||
PSELECT
|
||||
FLAGS "H"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
@ -1,5 +1,3 @@
|
||||
#include <applicat.h>
|
||||
|
||||
#include "velib07.h"
|
||||
#include "../ba/ba8500.h"
|
||||
|
||||
|
@ -478,6 +478,6 @@ bool TTabelle_sconti::remove()
|
||||
int ve2100(int argc, char* argv[]) {
|
||||
TTabelle_sconti a;
|
||||
|
||||
a.run(argc, argv, "Tabella sconti ");
|
||||
a.run(argc, argv, TR("Tabella sconti "));
|
||||
return 0;
|
||||
}
|
||||
|
@ -646,6 +646,6 @@ bool TCondizioni_vendita::handle_copy(TMask_field &b, KEY k)
|
||||
int ve2200(int argc, char* argv[])
|
||||
{
|
||||
TCondizioni_vendita a;
|
||||
a.run(argc, argv, "Condizioni di vendita");
|
||||
a.run(argc, argv, TR("Condizioni di vendita"));
|
||||
return 0;
|
||||
}
|
||||
|
@ -20,7 +20,6 @@ class TMask_anamag: public TMask
|
||||
int last_annogiac, last_annosto;
|
||||
int _disabled_user_page;
|
||||
|
||||
|
||||
int _type_cod, _altype_cod;
|
||||
TString4 _ean8_pref;
|
||||
TString8 _ean13_pref;
|
||||
@ -49,7 +48,6 @@ class TMask_anamag: public TMask
|
||||
static bool handle_sheet_giac_valgiac(TMask_field &, KEY); // handler
|
||||
static bool handle_sheet_stomag_stoval(TMask_field &, KEY); // handler
|
||||
static bool handle_autoinsert_livgiac(TMask_field &, KEY); // handler del campo
|
||||
static bool handle_classdog2(TMask_field&, KEY); // handler del secondo sottocampo della classe doganale
|
||||
|
||||
static void sheetgiac_get(TSheet_field &fld_righe, int item);
|
||||
static void sheetgiac_put(TSheet_field &fld_righe, int item);
|
||||
@ -327,8 +325,6 @@ void TMask_anamag::set_parametered_fields()
|
||||
set_handler(F_STOANNO, handle_stoanno);
|
||||
}
|
||||
|
||||
set_handler(F_CLASSDOG2, handle_classdog2);
|
||||
|
||||
// setta i campi della maschera per la pagina giacenze
|
||||
TSheet_field &fld_stomag = sfield(F_SHEETSTOMAG);
|
||||
TSheet_field &fld_giac = sfield(F_SHEETGIAC);
|
||||
@ -1191,18 +1187,6 @@ bool TMask_anamag::handle_sheetgiac(TMask_field &fld, KEY k)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TMask_anamag::handle_classdog2(TMask_field& f, KEY k)
|
||||
{
|
||||
if (f.to_check(k))
|
||||
{
|
||||
TString8 str; str << atoi(f.get());
|
||||
if (str.len() < f.size())
|
||||
str.right_just(f.size(), '0');
|
||||
f.set(str);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
int TMask_anamag::add_totali_storico(TString & codmag)
|
||||
{
|
||||
TSheet_field &s =(TSheet_field &)field(F_SHEETSTOMAG);
|
||||
@ -1851,6 +1835,7 @@ bool TAnagrafica_magazzino::user_create()
|
||||
open_files(LF_TAB, LF_TABCOM, LF_ANAMAG, LF_MAG, LF_STOMAG,
|
||||
LF_UMART, LF_CODCORR, LF_DESLIN, LF_DIST, LF_RDIST, LF_RMOVMAG,
|
||||
LF_CLIFO, LF_PCON, 0);
|
||||
|
||||
// crea l'oggetto per i parametri di livello giacenza
|
||||
// apre la maschera e dispone gli sheet
|
||||
_rel= new TRelation(LF_ANAMAG);
|
||||
|
@ -29,7 +29,7 @@
|
||||
#define F_DESCRV 138
|
||||
#define F_UMP 139
|
||||
#define F_PESO 140
|
||||
#define F_CLASSDOG1 141
|
||||
#define F_CLASSDOG 141
|
||||
#define F_CLASSDOGD 142
|
||||
#define F_UBICAZIONE 143
|
||||
#define F_UBICAZIONE1 144
|
||||
@ -143,8 +143,6 @@
|
||||
#define F_CONVET 286
|
||||
#define F_VALSTATUN 287
|
||||
#define F_PAESEOR 288
|
||||
#define F_CLASSDOG2 289
|
||||
#define F_CLASSDOG3 290
|
||||
|
||||
#define F_NUMREGULC1 300
|
||||
#define F_NUMRIGULC1 301
|
||||
|
@ -487,7 +487,7 @@ END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Unita'" 0 2 0 0
|
||||
PAGE "Unità" 0 2 0 0
|
||||
|
||||
GROUPBOX DLG_NULL 78 3
|
||||
BEGIN
|
||||
@ -509,12 +509,12 @@ END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 1 3 "@bUnita' di misura"
|
||||
PROMPT 1 3 "@bUnità di misura"
|
||||
END
|
||||
|
||||
SPREADSHEET F_SHEETUM 76 4
|
||||
BEGIN
|
||||
PROMPT 1 4 "Unita' di misura "
|
||||
PROMPT 1 4 "Unità di misura "
|
||||
FLAGS "A"
|
||||
USE LF_UMART KEY NRIGA
|
||||
INPUT CODART F_CODART
|
||||
@ -839,63 +839,38 @@ BEGIN
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
NUMBER F_CLASSDOG1 4
|
||||
NUMBER F_CLASSDOG 8
|
||||
BEGIN
|
||||
PROMPT 1 8 "Nomenclatura combin. "
|
||||
FIELD CLASSDOG[1,4]
|
||||
FLAG "Z"
|
||||
PROMPT 1 8 "Nomenclatura combinata "
|
||||
FIELD CLASSDOG
|
||||
USE %NOC
|
||||
INPUT CODTAB[1,4] F_CLASSDOG1
|
||||
INPUT CODTAB[5,6] F_CLASSDOG2
|
||||
INPUT CODTAB[7,8] F_CLASSDOG3
|
||||
DISPLAY "Codice 1" CODTAB[1,4]
|
||||
DISPLAY "@3" CODTAB[5,6]
|
||||
DISPLAY "@3" CODTAB[7,8]
|
||||
INPUT CODTAB F_CLASSDOG
|
||||
DISPLAY "Codice@4" CODTAB[1,4]
|
||||
DISPLAY " @2" CODTAB[5,6]
|
||||
DISPLAY " @2" CODTAB[7,8]
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CLASSDOG1 CODTAB[1,4]
|
||||
OUTPUT F_CLASSDOG2 CODTAB[5,6]
|
||||
OUTPUT F_CLASSDOG3 CODTAB[7,8]
|
||||
OUTPUT F_CLASSDOG CODTAB
|
||||
OUTPUT F_CLASSDOGD S0
|
||||
VALIDATE REQIF_FUNC 1 F_CLASSDOG2
|
||||
MESSAGE DIRTY,F_CLASSDOG3
|
||||
CHECKTYPE NORMAL
|
||||
VALIDATE FIXLEN_FUNC 8
|
||||
WARNING "Nomenclatura combinata assente"
|
||||
END
|
||||
|
||||
STRING F_CLASSDOG2 2
|
||||
BEGIN
|
||||
PROMPT 30 8 ""
|
||||
FIELD CLASSDOG[5,6]
|
||||
COPY ALL F_CLASSDOG1
|
||||
VALIDATE REQIF_FUNC 1 F_CLASSDOG2
|
||||
MESSAGE DIRTY,F_CLASSDOG3
|
||||
WARNING "Nomenclatura combinata assente"
|
||||
END
|
||||
|
||||
NUMBER F_CLASSDOG3 2
|
||||
STRING F_CLASSDOGD 50 41
|
||||
BEGIN
|
||||
PROMPT 35 8 ""
|
||||
FIELD CLASSDOG[7,8]
|
||||
FLAG "Z"
|
||||
COPY ALL F_CLASSDOG1
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Nomenclatura combinata assente"
|
||||
END
|
||||
|
||||
STRING F_CLASSDOGD 37
|
||||
BEGIN
|
||||
PROMPT 40 8 ""
|
||||
FLAG "D"
|
||||
END
|
||||
|
||||
STRING F_PROVOR 2
|
||||
BEGIN
|
||||
PROMPT 1 9 "Provincia di origine "
|
||||
PROMPT 1 9 "Provincia di origine (INTRA) "
|
||||
FIELD LF_ANAMAG->PROV
|
||||
END
|
||||
|
||||
STRING F_PAESEOR 2
|
||||
BEGIN
|
||||
PROMPT 50 9 "Paese di origine "
|
||||
PROMPT 49 9 "Paese di origine (INTRA) "
|
||||
FIELD LF_ANAMAG->PAESE
|
||||
END
|
||||
|
||||
|
@ -25,7 +25,7 @@ END
|
||||
|
||||
STRING FS_CODUMCORR 2
|
||||
BEGIN
|
||||
PROMPT 2 6 "Unita' di misura "
|
||||
PROMPT 2 6 "Unità di misura "
|
||||
FIELD UM
|
||||
FLAG "U"
|
||||
USE %UMS
|
||||
@ -40,7 +40,7 @@ END
|
||||
//Livelli giacenza
|
||||
STRING FS_LIV1 10
|
||||
BEGIN
|
||||
// Non mettere FLAGS "D" perchè disabiliterebbe tutta la colonna
|
||||
// Non mettere FLAGS "D" perché disabiliterebbe tutta la colonna
|
||||
FLAGS "U"
|
||||
PROMPT 2 8 "Livello 1 "
|
||||
USE GCG
|
||||
|
@ -1102,11 +1102,6 @@ void TGestione_listini_semplice::init_modify_mode(TMask& m)
|
||||
|
||||
bool TGestione_listini_semplice::user_create()
|
||||
{
|
||||
/* Controlla se la chiave ha l'autorizzazione a questo programma
|
||||
Tdninst dninst;
|
||||
if (!dninst.can_I_run(true))
|
||||
return error_box(TR("Programma non autorizzato!")); */
|
||||
|
||||
//decide il tipo di condizione di vendita: 'L'istino, 'C'ontratto, 'O'fferta
|
||||
_tipo = 'L';
|
||||
_codice = 0L;
|
||||
@ -1135,11 +1130,10 @@ bool TGestione_listini_semplice::user_create()
|
||||
}
|
||||
}
|
||||
if (_codice > 0 && _tipo < 'C')
|
||||
_tipo = 'C';
|
||||
_tipo = 'C'; // Se c'è il cliente deve essere un contratto
|
||||
else
|
||||
_tipo = toupper(_tipo);
|
||||
}
|
||||
|
||||
_rel = new TRelation(LF_CONDV);
|
||||
|
||||
//attenzione!! questo è il parametro per avere la lunghezza del numero riga sullo sheet
|
||||
|
@ -64,9 +64,6 @@ void TRicarico_listini_mask::save()
|
||||
TProgind pi(s.items(), TR("Salvataggio modifiche"), false, true);
|
||||
FOR_EACH_SHEET_ROW(s, r, row) if (_dirty[r])
|
||||
{
|
||||
if (!pi.setstatus(r))
|
||||
break;
|
||||
|
||||
const TString80 codart = row->get(s.cid2index(F_CODART));
|
||||
const real sconto = row->get(s.cid2index(F_SCONTO));
|
||||
const real costo = row->get(s.cid2index(F_COSTO));
|
||||
@ -104,6 +101,51 @@ void TRicarico_listini_mask::save()
|
||||
rcondv.rewrite();
|
||||
}
|
||||
}
|
||||
|
||||
const char* cod = "FGDI";
|
||||
TLocalisamfile deslin(LF_DESLIN); deslin.setkey(2);
|
||||
for (int lingua = 0; cod[lingua]; lingua++)
|
||||
{
|
||||
TString desc = row->get(s.cid2index(F_DESCFRA+lingua));
|
||||
if (desc.full())
|
||||
{
|
||||
desc.trim();
|
||||
deslin.zero();
|
||||
deslin.put("CODART", codart);
|
||||
deslin.put("CODLIN", cod[lingua]);
|
||||
if (deslin.read() == NOERR)
|
||||
{
|
||||
if (deslin.get("DESCR") != desc)
|
||||
{
|
||||
deslin.put("DESCR", desc);
|
||||
deslin.rewrite();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TISAM_recordset rsdeslin("USE DESLIN\nFROM CODART=#ART\nTO CODART=#ART");
|
||||
rsdeslin.set_var("#ART", codart);
|
||||
int nriga = 1;
|
||||
if (rsdeslin.move_last())
|
||||
nriga += rsdeslin.get("NRIGA").as_int();
|
||||
deslin.zero();
|
||||
deslin.put("CODART", codart);
|
||||
deslin.put("NRIGA", nriga);
|
||||
deslin.put("CODLIN", cod[lingua]);
|
||||
deslin.put("DESCR", desc);
|
||||
const int err = deslin.write();
|
||||
if (err != NOERR)
|
||||
{
|
||||
TString msg;
|
||||
msg << TR("Descrizione in lingua ") << cod[lingua] << TR(" articolo ") << codart;
|
||||
cantwrite_box(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!pi.setstatus(r+1))
|
||||
break;
|
||||
}
|
||||
_dirty.reset();
|
||||
disable(DLG_SAVEREC);
|
||||
@ -198,21 +240,24 @@ void TRicarico_listini_mask::load()
|
||||
}
|
||||
|
||||
const TString& codart = sm.get(F_CODART);
|
||||
const char cod[4] = "FGD";
|
||||
for (int lingua = 0; lingua < 3; lingua++)
|
||||
const char* cod = "FGDI";
|
||||
for (int lingua = 0; cod[lingua]; lingua++)
|
||||
{
|
||||
deslin.zero();
|
||||
deslin.put("CODART", codart);
|
||||
deslin.put("CODLIN", cod[lingua]);
|
||||
if (deslin.read() == NOERR)
|
||||
sm.set(F_DESCFRA+lingua, deslin.get("DESCR"));
|
||||
else
|
||||
sm.reset(F_DESCFRA+lingua);
|
||||
}
|
||||
|
||||
TToken_string& r = s.row(-1);
|
||||
if (r.empty()) // Dummy test
|
||||
if (r.empty_items()) // Dummy test
|
||||
{
|
||||
sm.field(F_RICARICO).on_hit();
|
||||
sm.field(F_OLDPRICE).on_hit();
|
||||
sm.field(F_NEWPRICE).on_hit();
|
||||
sm.efield(F_RICARICO).on_hit();
|
||||
sm.efield(F_OLDPRICE).on_hit();
|
||||
sm.efield(F_NEWPRICE).on_hit();
|
||||
FOR_EACH_MASK_FIELD(sm, i, f)
|
||||
{
|
||||
const short id = f->dlg();
|
||||
@ -541,12 +586,10 @@ class TRicarico_listini : public TSkeleton_application
|
||||
{
|
||||
protected:
|
||||
virtual bool create();
|
||||
|
||||
public:
|
||||
virtual void main_loop();
|
||||
};
|
||||
|
||||
|
||||
void TRicarico_listini::main_loop()
|
||||
{
|
||||
TRicarico_listini_mask mask;
|
||||
@ -555,9 +598,11 @@ void TRicarico_listini::main_loop()
|
||||
|
||||
bool TRicarico_listini::create()
|
||||
{
|
||||
#ifndef DBG
|
||||
Tdninst dninst;
|
||||
if (!dninst.can_I_run(true))
|
||||
return error_box(TR("Programma personalizzato non autorizzato!"));
|
||||
return cantaccess_box(title());
|
||||
#endif
|
||||
TSheet_field::set_line_number_width(4);
|
||||
return TSkeleton_application::create();
|
||||
}
|
||||
|
@ -25,4 +25,5 @@
|
||||
#define F_DESCFRA 112
|
||||
#define F_DESCENG 113
|
||||
#define F_DESCDEU 114
|
||||
#define F_CODARTALT 115
|
||||
#define F_DESCITA 115
|
||||
#define F_CODARTALT 116
|
||||
|
@ -175,6 +175,7 @@ BEGIN
|
||||
ITEM "Descrizione\nFrancese@30"
|
||||
ITEM "Descrizione\nInglese@30"
|
||||
ITEM "Descrizione\nTedesco@30"
|
||||
ITEM "Descrizione\nItaliano@30"
|
||||
ITEM "Replaced by@20"
|
||||
END
|
||||
|
||||
@ -183,7 +184,7 @@ ENDPAGE
|
||||
ENDMASK
|
||||
|
||||
// maschera di riga sheet
|
||||
PAGE "Riga aggiornamento listini" -1 -1 66 12
|
||||
PAGE "Riga aggiornamento listini" -1 -1 66 13
|
||||
|
||||
STRING F_CODART 20
|
||||
BEGIN
|
||||
@ -293,20 +294,22 @@ END
|
||||
STRING F_DESCFRA 50
|
||||
BEGIN
|
||||
PROMPT 1 9 "Descr. FRA "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_DESCENG 50
|
||||
BEGIN
|
||||
PROMPT 1 10 "Descr. ENG "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_DESCDEU 50
|
||||
BEGIN
|
||||
PROMPT 1 11 "Descr. DEU "
|
||||
FLAGS "D"
|
||||
EN
|
||||
END
|
||||
|
||||
STRING F_DESCITA 50
|
||||
BEGIN
|
||||
PROMPT 1 12 "Descr. ITA "
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
|
@ -606,15 +606,15 @@ void TStatistiche_ve::elabora(const TMask& mask) const
|
||||
if (righe_items > 0)
|
||||
{
|
||||
//E crea pure la progind..
|
||||
TProgind pi(righe_items, TR("Generazione file statistiche..."), true, true);
|
||||
TProgress_monitor pi(righe_items, TR("Generazione file statistiche..."));
|
||||
|
||||
//Scansione del recordset trovato
|
||||
for (bool ok = righe.move_first(); ok; ok = righe.move_next())
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
//scrive sul CSV i campi che servono al file di excel e al report
|
||||
csv->aggiungi_riga(righe, tipo_dati, tipo_stat, tipo_dettaglio);
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
}
|
||||
|
||||
//aggiorna le colonne delle percentuali
|
||||
@ -696,16 +696,13 @@ void TStatistiche_ve::elabora(const TMask& mask) const
|
||||
void TStatistiche_ve::main_loop()
|
||||
{
|
||||
TStatistiche_ve_mask mask;
|
||||
|
||||
while (mask.run() == K_ENTER)
|
||||
{
|
||||
elabora(mask);
|
||||
}
|
||||
}
|
||||
|
||||
bool TStatistiche_ve::create()
|
||||
{
|
||||
//controlla se la chiave ha l'autorizzazione a questo programma
|
||||
//controlla se la chiave ha l'autorizzazione per questo programma
|
||||
Tdninst dninst;
|
||||
if (!dninst.can_I_run(true))
|
||||
return error_box(TR("Programma non autorizzato!"));
|
||||
|
@ -1,8 +1,5 @@
|
||||
#include <applicat.h>
|
||||
#include <dongle.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include "velib07.h"
|
||||
#include "../ba/ba8500.h"
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
|
@ -971,7 +971,7 @@ bool TRicalcolo_mask::elabora()
|
||||
}
|
||||
TToken_string& key_expr = get_key_expr(cur.key());
|
||||
|
||||
TLog_report vw(TR("Ricalcolo valori"));
|
||||
TLog_report vw(main_app().title());
|
||||
|
||||
TTable_expression::set_relation(cur.relation());
|
||||
TTable_expression::set_window(&vw);
|
||||
|
@ -107,7 +107,7 @@ void TStatus_change::main_loop()
|
||||
msg.add_plural(total, TR("documento"));
|
||||
if (yesno_box(msg))
|
||||
{
|
||||
TProgress_monitor pi(total, name());
|
||||
TProgress_monitor pi(total, title());
|
||||
const TString& finale = m.get(F_FINALE);
|
||||
TDocumento* doc = new TDocumento;
|
||||
rel.lfile().set_curr(doc);
|
||||
|
@ -107,16 +107,17 @@ BEGIN
|
||||
PROMPT 2 10 "Da "
|
||||
USE LF_DOC SELECT STATO==#F_INIZIALE
|
||||
JOIN LF_CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF
|
||||
INPUT ANNO F_ANNO SELECT
|
||||
INPUT PROVV F_PROVVIS SELECT
|
||||
INPUT ANNO F_ANNO SELECT
|
||||
INPUT CODNUM F_CODNUM SELECT
|
||||
INPUT NDOC F_DANUMERO
|
||||
DISPLAY "Num." CODNUM
|
||||
DISPLAY "Anno" ANNO
|
||||
DISPLAY "Provv" PROVV
|
||||
DISPLAY "Anno" ANNO
|
||||
DISPLAY "Num." CODNUM
|
||||
DISPLAY "Tipo" TIPODOC
|
||||
DISPLAY "N.Doc. " NDOC
|
||||
DISPLAY "Data Doc. " DATADOC
|
||||
DISPLAY "Stato" STATO
|
||||
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
|
||||
OUTPUT F_DANUMERO NDOC
|
||||
CHECKTYPE SEARCH
|
||||
|
@ -23,7 +23,7 @@ public:
|
||||
|
||||
TArchive_mask::TArchive_mask() : TMask("ve5400")
|
||||
{
|
||||
TList_field& lf = (TList_field&)field(F_DRIVE);
|
||||
TList_field& lf = lfield(F_DRIVE);
|
||||
TToken_string codes, values;
|
||||
TString4 str;
|
||||
int k = 0;
|
||||
@ -51,7 +51,6 @@ TArchive_mask::TArchive_mask() : TMask("ve5400")
|
||||
//-------APPLICAZIONE-----------------------------
|
||||
class TArchive_doc : public TSkeleton_application
|
||||
{
|
||||
TArray _file;
|
||||
TIsamtempfile *_tdoc; //dichiaro un puntatore al file documenti (non posso dichiarare un file)
|
||||
TIsamtempfile *_trdoc; // righe documenti
|
||||
TIsamtempfile *_trcf; // clienti/ fornitori
|
||||
@ -63,12 +62,11 @@ class TArchive_doc : public TSkeleton_application
|
||||
|
||||
protected: // TSkeleton_application
|
||||
virtual void main_loop();
|
||||
void open_files(int logicnum, ...);
|
||||
virtual bool create();
|
||||
void create_tmp_files(bool create);
|
||||
void delete_tmp_files(bool remove);
|
||||
void archivia(const TMask& m);
|
||||
void ripristina(const TMask& m);
|
||||
bool ripristina(const TMask& m);
|
||||
|
||||
bool restore_file(TIsamtempfile& src, bool update);
|
||||
bool restore_clifo(bool update);
|
||||
@ -76,26 +74,13 @@ protected: // T
|
||||
|
||||
public:
|
||||
TArchive_doc() { }
|
||||
virtual ~TArchive_doc() { }
|
||||
};
|
||||
|
||||
void TArchive_doc::open_files(int logicnum, ...)
|
||||
{
|
||||
va_list marker;
|
||||
va_start(marker, logicnum);
|
||||
while (logicnum > 0)
|
||||
{
|
||||
CHECKD(_file.objptr(logicnum) == NULL, "File gia' aperto: ", logicnum);
|
||||
_file.add(new TLocalisamfile(logicnum), logicnum);
|
||||
logicnum = va_arg(marker, int);
|
||||
}
|
||||
}
|
||||
|
||||
bool TArchive_doc::create()
|
||||
{
|
||||
open_files(LF_TABCOM, LF_TAB, LF_CLIFO, LF_OCCAS, LF_INDSP, LF_CFVEN,
|
||||
/* open_files(LF_TABCOM, LF_TAB, LF_CLIFO, LF_OCCAS, LF_INDSP, LF_CFVEN,
|
||||
LF_DOC, LF_RIGHEDOC, LF_ANAMAG, LF_MOVMAG, LF_RMOVMAG, LF_CONDV,
|
||||
LF_SVRIEP, LF_AGENTI, LF_PERCPROV, LF_CESS, 0);
|
||||
LF_SVRIEP, LF_AGENTI, LF_PERCPROV, LF_CESS, 0);*/
|
||||
_tmp_dir.temp();
|
||||
_tmp_dir = _tmp_dir.path();
|
||||
_tmp_dir << "VE";
|
||||
@ -217,7 +202,8 @@ void TArchive_doc::archivia(const TMask& m)
|
||||
|
||||
delete_tmp_files(false); //chiude i files temp in modo da risparmiare memoria
|
||||
|
||||
const char * dir = &_tmp_dir[1]; //fa puntare dir alla directory temp
|
||||
const char* dir = _tmp_dir; //fa puntare dir alla directory temp
|
||||
if (*dir == '%') dir++;
|
||||
bool rt = _arc.backup(dir,_unit,_desc, TRUE); //esegue la compressione ed il salvataggio sul device scelto
|
||||
create_tmp_files(false); //apre i files temp, riallocandoli (NON li crea effettvam.)
|
||||
delete_tmp_files(true); //cancella fisicamente i files temp
|
||||
@ -250,16 +236,10 @@ bool TArchive_doc::restore_file(TIsamtempfile& src, bool update)
|
||||
TProgress_monitor pi(src.items(), msg);
|
||||
for (int err = src.first(); err == NOERR; err = src.next())
|
||||
{
|
||||
err = src.curr().write(dst);
|
||||
if (err == _isreinsert)
|
||||
{
|
||||
if (update)
|
||||
err = src.curr().rewrite(dst);
|
||||
else
|
||||
err = NOERR;
|
||||
}
|
||||
dst.curr() = src.curr();
|
||||
err = dst.write_rewrite();
|
||||
if (err != NOERR)
|
||||
return cantwrite_box(src.description());
|
||||
return cantwrite_box(dst.description());
|
||||
if (!pi.add_status(1))
|
||||
break;
|
||||
}
|
||||
@ -283,7 +263,7 @@ bool TArchive_doc::restore_docs()
|
||||
return ok;
|
||||
}
|
||||
|
||||
void TArchive_doc::ripristina(const TMask& m)
|
||||
bool TArchive_doc::ripristina(const TMask& m)
|
||||
{
|
||||
_unit = m.get(F_DRIVE)[0];
|
||||
_path = m.get(F_PATH);
|
||||
@ -293,12 +273,15 @@ void TArchive_doc::ripristina(const TMask& m)
|
||||
if (!xvt_fsys_is_removable_drive(src) && _path.full())
|
||||
src.add(_path);
|
||||
src.add("ve.z00");
|
||||
if (!src.exist())
|
||||
return cantread_box(src);
|
||||
|
||||
const char* dst = _tmp_dir;
|
||||
if (*dst == '%') dst++;
|
||||
|
||||
const char* dst = & _tmp_dir[1];
|
||||
if (::aga_unzip(src, dst))
|
||||
{
|
||||
create_tmp_files(FALSE); // In realta' ci sono gia'
|
||||
|
||||
create_tmp_files(false); // In realta' ci sono gia'
|
||||
if (m.get_bool(F_WITHCLI))
|
||||
restore_clifo(m.get_bool(F_UPDATE));
|
||||
restore_docs();
|
||||
@ -306,7 +289,8 @@ void TArchive_doc::ripristina(const TMask& m)
|
||||
delete_tmp_files(true); // Removes temp files!
|
||||
}
|
||||
else
|
||||
error_box(TR("Errore nella scompattazione dei file. Nessun documento ricevuto."));
|
||||
return error_box(TR("Errore nella scompattazione dei file. Nessun documento ricevuto."));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
@ -68,15 +68,15 @@ void TFatturazione_bolle_app::process_by_cli(const TMask& m)
|
||||
const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA);
|
||||
const long an = m.get_long(F_NUMERO_DOCUMENTO_A);
|
||||
|
||||
TElaborazione * e = elab(m.get(F_CODICE_ELAB));
|
||||
TElaborazione & eld = *e;
|
||||
TElaborazione& eld = *elab(m.get(F_CODICE_ELAB));
|
||||
TToken_string tipidoc(24), statidoc(10);
|
||||
eld.tipi_stati_iniziali(tipidoc, statidoc);
|
||||
|
||||
TTipo_documento t(eld.tipo_iniziale(0));
|
||||
char tipocf(t.tipocf());
|
||||
TLista_cf clienti(tipocf);
|
||||
const int tot_cli = clienti.leggi(dc, ac, da, aa, dz, az);
|
||||
|
||||
const int tot_cli = clienti.leggi_doc(eld, dd, ad, dc, ac, da, aa, dz, az);
|
||||
|
||||
TString msg(80);
|
||||
iw.set_max(tot_cli);
|
||||
@ -102,7 +102,7 @@ void TFatturazione_bolle_app::process_by_cli(const TMask& m)
|
||||
if (!iw.add_status())
|
||||
break;
|
||||
}
|
||||
delete e;
|
||||
delete &eld;
|
||||
}
|
||||
|
||||
void TFatturazione_bolle_app::process_by_ragsoc(const TMask& m)
|
||||
|
31
ve/velib.h
31
ve/velib.h
@ -230,7 +230,7 @@ class TTipo_documento : public TRectype // velib03
|
||||
char _tipocf;
|
||||
char _tipocr;
|
||||
char _check_qta;
|
||||
bool _cnt_prezzi, _show_evaded_lines, _load_cont, _non_evadere, _hca_req, _check_double_art;
|
||||
bool _cnt_prezzi, _show_evaded_lines, _load_cont, _non_evadere, _hca_req, _check_double_art, _ignora_anticipi_fatturazione;
|
||||
|
||||
protected:
|
||||
void add_formula_if_needed(TConfig& profile, TString& variable, const char* varname, const char* formula);
|
||||
@ -341,12 +341,11 @@ public:
|
||||
bool da_evadere() const { return !_non_evadere; }
|
||||
bool head_ca_required() const { return _hca_req; }
|
||||
bool check_double_art() const { return _check_double_art; }
|
||||
|
||||
bool ignora_anticipi_fatturazione() const { return _ignora_anticipi_fatturazione; }
|
||||
|
||||
TTipo_documento(const char* tipodoc = NULL);
|
||||
TTipo_documento(const TRectype& rec);
|
||||
virtual ~TTipo_documento();
|
||||
|
||||
};
|
||||
|
||||
const TTipo_documento& cached_tipodoc(const char* tipodoc);
|
||||
@ -484,7 +483,7 @@ public:
|
||||
bool formfeed() const { return get_bool("B0"); }
|
||||
|
||||
TFormula_documento* first_formula() { return succ_formula(true); }
|
||||
TFormula_documento* succ_formula(bool restart = FALSE);
|
||||
TFormula_documento* succ_formula(bool restart = false);
|
||||
|
||||
int read(const char* tiporig);
|
||||
void set_defaults(TSheet_field& s, int row) const;
|
||||
@ -566,7 +565,7 @@ public:
|
||||
(is_spese() && !spesa().is_percentuale()) || is_prestazione(); }
|
||||
bool is_evasa() const; // Ritorna vero se la riga è evasa
|
||||
void checked(bool on = true) { put(RDOC_CHECKED, (bool)on); }
|
||||
void unchecked() { checked(FALSE); }
|
||||
void unchecked() { checked(false); }
|
||||
bool linked() const { return get(RDOC_DACODNUM).full(); }
|
||||
// @cmember Assegna il documento corrente
|
||||
void set_doc(TDocumento * doc) { _doc = doc; }
|
||||
@ -619,9 +618,9 @@ public:
|
||||
|
||||
real prezzo(bool scontato, bool lordo, int ndec = AUTO_DECIMALS) const ;
|
||||
real importo(bool scontato , bool lordo, int ndec = AUTO_DECIMALS) const ;
|
||||
real sconto() const { return importo(FALSE,FALSE) - importo(true,FALSE); }
|
||||
real sconto() const { return importo(false,false) - importo(true,false); }
|
||||
real iva(int ndec) const;
|
||||
real imponibile(bool lordo = FALSE) const;
|
||||
real imponibile(bool lordo = false) const;
|
||||
real imponibile_omaggio(int iva_calc_mode = 1) const;
|
||||
real iva_omaggio(int ndec, int iva_calc_mode = 1) const;
|
||||
real imposta(bool round = true) const;
|
||||
@ -702,6 +701,7 @@ public:
|
||||
};
|
||||
|
||||
class TAgente;
|
||||
class TDoc_key;
|
||||
|
||||
class TDocumento : public TMultiple_rectype // velib03
|
||||
{
|
||||
@ -810,15 +810,14 @@ public:
|
||||
int read(const TRectype& rec, word op = _isequal, word lockop = _nolock) { *this = rec; return read(op, lockop); }
|
||||
int read(word op = _isequal, word lockop = _nolock) { TLocalisamfile f(LF_DOC); return read(f, op, lockop);}
|
||||
|
||||
int write(bool re = FALSE) const { TLocalisamfile f(LF_DOC); return write_rewrite(f, re);}
|
||||
int write(bool re = false) const { TLocalisamfile f(LF_DOC); return write_rewrite(f, re);}
|
||||
int rewrite() const { return write(true); }
|
||||
int remove() const { TLocalisamfile f(LF_DOC); return remove(f);}
|
||||
int decimals(bool price = FALSE) const;
|
||||
int decimals(bool price = false) const;
|
||||
|
||||
void flush_rows();
|
||||
|
||||
void calc_provvigione(TProvvigioni_agente & provv, const TString & key, bool first = true, bool generata = true);
|
||||
|
||||
char tipo_numerazione() const { return get_char(DOC_PROVV); }
|
||||
int anno() const { return get_int(DOC_ANNO); }
|
||||
const TString& numerazione() const { return get(DOC_CODNUM); }
|
||||
@ -869,8 +868,8 @@ public:
|
||||
real spese_incasso(real &imp, int ndec, TTipo_importo netto = _lordo) const ;
|
||||
real bolli(real & imp, int ndec, TTipo_importo netto = _lordo) const ;
|
||||
|
||||
real imponibile(bool spese = FALSE, int ndec = AUTO_DECIMALS) const;
|
||||
real imposta(bool spese = FALSE, int ndec = AUTO_DECIMALS) const;
|
||||
real imponibile(bool spese = false, int ndec = AUTO_DECIMALS) const;
|
||||
real imposta(bool spese = false, int ndec = AUTO_DECIMALS) const;
|
||||
real totale_doc() const;
|
||||
real totale_netto() const;
|
||||
real basesconto() const;
|
||||
@ -881,7 +880,7 @@ public:
|
||||
|
||||
TPagamento& pagamento();
|
||||
|
||||
void update_spese_aut(TString_array & spese, bool preserve_old = FALSE, TSheet_field * sh = NULL);
|
||||
void update_spese_aut(TString_array & spese, bool preserve_old = false, TSheet_field * sh = NULL);
|
||||
real calc_conai_qta(TCONAI_class type);
|
||||
void update_conai();
|
||||
|
||||
@ -895,12 +894,12 @@ public:
|
||||
const TString & codesiva() const;
|
||||
void get_protocolli_esenzione(TString & esenzione, TString & data_esenzione,
|
||||
TString & registrazione, TString & data_registrazione) const;
|
||||
|
||||
void cli2doc() { clifor().cli2doc(*this); }
|
||||
TDocumento ();
|
||||
TDocumento (const TDocumento& d);
|
||||
TDocumento(char provv, int anno, const char* codnum, long numdoc);
|
||||
TDocumento(const TRectype& doc);
|
||||
TDocumento(const TDoc_key& key);
|
||||
virtual ~TDocumento();
|
||||
};
|
||||
|
||||
@ -928,7 +927,7 @@ public:
|
||||
|
||||
TCurrency_documento(const TCurrency& cur) { copy(cur); }
|
||||
TCurrency_documento(const TCurrency_documento& cur) { copy(cur); }
|
||||
TCurrency_documento(const real& num, const TDocumento &doc, bool price = FALSE);
|
||||
TCurrency_documento(const real& num, const TDocumento &doc, bool price = false);
|
||||
virtual ~TCurrency_documento() { }
|
||||
};
|
||||
|
||||
@ -1066,7 +1065,7 @@ public:
|
||||
static bool anno_handler( TMask_field& f, KEY key);
|
||||
static bool num_handler( TMask_field& f, KEY key );
|
||||
static bool numdocrif_search_handler( TMask_field& f, KEY key );
|
||||
static bool ragsoc_search_handler( TMask_field& f, KEY key );
|
||||
//static bool ragsoc_search_handler( TMask_field& f, KEY key );
|
||||
static bool datadocrif_handler(TMask_field& f, KEY key);
|
||||
static bool liqdiff_handler( TMask_field& f, KEY key );
|
||||
|
||||
|
@ -72,6 +72,7 @@ int TCodice_numerazione::read(const char* codnum)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// trova le numerazioni documenti in base ai tipi richiesti (ca3800,ca3900,ps1001,ha3800)
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
int numerazioni_documenti(TString_array& num_doc, const TString& tipo_doc)
|
||||
{
|
||||
//e adesso cerca le numerazioni che contengono tipi ordine
|
||||
|
@ -944,15 +944,16 @@ real TRiga_documento::calc_conai_qta(TCONAI_class type) const
|
||||
const real peso = get_real(weight_name); // Peso unitario imballo
|
||||
real qta = quantita(); // Quantita' merce
|
||||
if (peso > ZERO && !qta.is_zero()) // Verifica se ha un peso valido
|
||||
{
|
||||
// A volte CODARTMAG è vuoto per cui converte erroneamente la qta in 0 :-(
|
||||
if (is_articolo())
|
||||
{
|
||||
const TString4 um = get(RDOC_UMQTA);
|
||||
TArticolo& art = articolo();
|
||||
qta = art.convert_to_um(qta, NULL, um); // Converte la quantita nell'unita' base
|
||||
}
|
||||
kg = qta * peso; // Calcola peso dell'imballo
|
||||
kg.round(5);
|
||||
/* TString s = kg.string();
|
||||
|
||||
s.trim(); */
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1029,14 +1030,14 @@ bool TRiga_documento::doc_dependent() const
|
||||
if (tipor == RIGA_SCONTI)
|
||||
return get(RDOC_SCONTO).not_empty();
|
||||
}
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
void TRiga_documento::put_str(const char* fieldname, const char* val)
|
||||
{
|
||||
if (strcmp(fieldname, RDOC_TIPORIGA) == 0)
|
||||
if (xvt_str_same(fieldname, RDOC_TIPORIGA))
|
||||
{
|
||||
const TString4 v(val);
|
||||
const TString4 v = val;
|
||||
if (TRectype::get(RDOC_TIPORIGA) != v)
|
||||
{
|
||||
TAuto_variable_rectype::put_str(fieldname, v);
|
||||
@ -1061,7 +1062,7 @@ bool TRiga_documento::is_articolo() const
|
||||
|
||||
void TRiga_documento::zero(const char* fieldname)
|
||||
{
|
||||
if (strcmp(fieldname, RDOC_TIPORIGA) == 0)
|
||||
if (xvt_str_same(fieldname, RDOC_TIPORIGA))
|
||||
reset_fields(*this);
|
||||
TAuto_variable_rectype::zero(fieldname);
|
||||
dirty_fields();
|
||||
@ -1079,7 +1080,7 @@ void TRiga_documento::cms2tipodet()
|
||||
{
|
||||
TString4 cms_tipodet;
|
||||
const TString4 tipodet = get(RDOC_TIPODET);
|
||||
TString codcms = codice_commessa();
|
||||
const TString20 codcms = codice_commessa();
|
||||
|
||||
if (codcms.full() && get(RDOC_CODIVA).full())
|
||||
{
|
||||
@ -1129,10 +1130,8 @@ void TRiga_documento::autosave(TSheet_field& f)
|
||||
TMask& m = f.sheet_row_mask(num);
|
||||
TToken_string& row = f.row(num);
|
||||
|
||||
|
||||
put( RDOC_TIPORIGA, row.get(f.cid2index(FR_TIPORIGA)));
|
||||
TString8 codmag(row.get(f.cid2index(FR_CODMAG)));
|
||||
|
||||
TString8 codmag = row.get(f.cid2index(FR_CODMAG));
|
||||
codmag.left_just(3);
|
||||
codmag << row.get( f.cid2index(FR_CODDEP ));
|
||||
put( RDOC_CODMAG, codmag);
|
||||
|
113
ve/velib03.cpp
113
ve/velib03.cpp
@ -8,9 +8,12 @@
|
||||
#include "../cg/cg2103.h"
|
||||
#include "../db/dblib.h"
|
||||
#include "../pr/prlib.h"
|
||||
#include "../sv/svlib01.h"
|
||||
#include "../li/letint.h"
|
||||
|
||||
#ifdef LIVE_STATISTICS
|
||||
#include "../sv/svlib01.h"
|
||||
#endif
|
||||
|
||||
#include "veini.h"
|
||||
#include "velib.h"
|
||||
#include "sconti.h"
|
||||
@ -226,11 +229,13 @@ long TDocumento::_firm = -1;
|
||||
TString4 TDocumento::_codiva_spese;
|
||||
TString4 TDocumento::_codiva_bolli;
|
||||
short TDocumento::_has_mag = 3;
|
||||
short TDocumento::_has_stat_ven = 3;
|
||||
short TDocumento::_has_provv = 3;
|
||||
#ifdef LIVE_STATISTICS
|
||||
short TDocumento::_has_stat_ven = 3;
|
||||
#endif
|
||||
|
||||
TCodgiac_livelli * TDocumento::_livelli=NULL;
|
||||
|
||||
// HIDDEN TStats_agg _st_agg;
|
||||
HIDDEN TAssoc_array _docs_to_agg;
|
||||
|
||||
void TDocumento::init()
|
||||
@ -265,15 +270,24 @@ TDocumento::TDocumento(char provv, int anno, const char* codnum, long numdoc)
|
||||
: TMultiple_rectype(LF_DOC)
|
||||
{
|
||||
init();
|
||||
if (numdoc <= 0)
|
||||
{
|
||||
numdoc = 0;
|
||||
set_key(*this, provv, anno, codnum, numdoc);
|
||||
}
|
||||
else
|
||||
if (numdoc > 0)
|
||||
read(provv, anno, codnum, numdoc);
|
||||
else
|
||||
set_key(*this, provv, anno, codnum, 0L);
|
||||
}
|
||||
|
||||
TDocumento::TDocumento(const TDoc_key& key)
|
||||
: TMultiple_rectype(LF_DOC)
|
||||
{
|
||||
init();
|
||||
const long ndoc = key.ndoc();
|
||||
if (ndoc > 0)
|
||||
read(key.provv(), key.anno(), key.codnum(), ndoc);
|
||||
else
|
||||
set_key(*this, key.provv(), key.anno(), key.codnum(), 0L);
|
||||
}
|
||||
|
||||
|
||||
TDocumento::TDocumento(const TRectype& rec)
|
||||
: TMultiple_rectype(LF_DOC)
|
||||
{
|
||||
@ -299,12 +313,14 @@ const TString& TDocumento::codiva_bolli() const
|
||||
|
||||
void TDocumento::check_modules()
|
||||
{
|
||||
if (_has_mag == 3)
|
||||
if (_has_mag < 0 || _has_mag > 1)
|
||||
{
|
||||
const TDongle& din = dongle();
|
||||
_has_mag = din.active(MGAUT);
|
||||
_has_stat_ven = din.active(SVAUT);
|
||||
_has_provv = din.active(PRAUT);
|
||||
#ifdef LIVE_STATISTICS
|
||||
_has_stat_ven = din.active(SVAUT);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -606,26 +622,53 @@ const TString & TDocumento::commessa_principale() const
|
||||
return codice_commessa();
|
||||
}
|
||||
|
||||
// Controlla se un documento è incluso nelle statistiche definitive
|
||||
static bool doc_invalidating_stats(const TDocumento& doc)
|
||||
{
|
||||
bool inv = false;
|
||||
if (dongle().active(SVAUT) && doc.tipo().statistiche())
|
||||
{
|
||||
const TDate datadoc = doc.get(DOC_DATADOC);
|
||||
if (datadoc.ok())
|
||||
{
|
||||
const TDate datalast = ini_get_string(CONFIG_DITTA, "sv", "UltimoCalcolo");
|
||||
inv = datadoc <= datalast;
|
||||
}
|
||||
}
|
||||
return inv;
|
||||
}
|
||||
|
||||
bool TDocumento::modificabile() const
|
||||
{
|
||||
bool maybe = true;
|
||||
|
||||
const char stato_attuale = stato();
|
||||
|
||||
if (stato_attuale <= ' ')
|
||||
return true;
|
||||
|
||||
if (stato_attuale > ' ')
|
||||
{
|
||||
const TString& stati_modifica = tipo().stati_iniziali_modifica();
|
||||
return stati_modifica.blank() || stati_modifica.find(stato_attuale) >= 0;
|
||||
maybe = stati_modifica.blank() || stati_modifica.find(stato_attuale) >= 0;
|
||||
|
||||
if (maybe && doc_invalidating_stats(*this))
|
||||
maybe = false;
|
||||
}
|
||||
|
||||
return maybe;
|
||||
}
|
||||
|
||||
bool TDocumento::cancellabile() const
|
||||
{
|
||||
bool maybe = true;
|
||||
|
||||
const char stato_attuale = stato();
|
||||
|
||||
if (stato_attuale <= ' ')
|
||||
return true;
|
||||
|
||||
if (stato_attuale > ' ')
|
||||
{
|
||||
const TString& stati_cancellazione = tipo().stati_iniziali_cancellazione();
|
||||
return stati_cancellazione.blank() || stati_cancellazione.find(stato_attuale) >= 0;
|
||||
maybe = stati_cancellazione.blank() || stati_cancellazione.find(stato_attuale) >= 0;
|
||||
|
||||
if (maybe && doc_invalidating_stats(*this))
|
||||
maybe = false;
|
||||
}
|
||||
return maybe;
|
||||
}
|
||||
|
||||
bool TDocumento::stampabile() const
|
||||
@ -644,12 +687,13 @@ bool TDocumento::stampabile() const
|
||||
bool TDocumento::bloccato() const
|
||||
{
|
||||
const char stato_attuale = stato();
|
||||
|
||||
if (stato_attuale <= ' ')
|
||||
return false;
|
||||
|
||||
char stato_bloccato = tipo().stato_bloccato();
|
||||
if (doc_invalidating_stats(*this))
|
||||
return true;
|
||||
|
||||
char stato_bloccato = tipo().stato_bloccato();
|
||||
if (stato_bloccato <= ' ')
|
||||
return false;
|
||||
|
||||
@ -662,12 +706,10 @@ bool TDocumento::chiuso() const
|
||||
return false;
|
||||
|
||||
const char stato_attuale = stato();
|
||||
|
||||
if (stato_attuale <= ' ')
|
||||
return false;
|
||||
|
||||
char stato_chiuso = tipo().stato_chiuso();
|
||||
|
||||
if (stato_chiuso <= ' ')
|
||||
return false;
|
||||
|
||||
@ -711,9 +753,9 @@ void TDocumento::copy_data(TRectype& dst, const TRectype& src)
|
||||
dst.put(RDOC_NRIGA, nriga);
|
||||
dst.put(RDOC_IDRIGA, idriga);
|
||||
dst.zero(RDOC_MOVMAG);
|
||||
const TString memo = src.get(RDOC_DESCEST);
|
||||
const TString& memo = src.get(RDOC_DESCEST);
|
||||
dst.put(RDOC_DESCEST, memo);
|
||||
const TString g1 = src.get(RDOC_RG1);
|
||||
const TString& g1 = src.get(RDOC_RG1);
|
||||
dst.put(RDOC_RG1, g1);
|
||||
((TRiga_documento&)dst).load_memo();
|
||||
}
|
||||
@ -778,6 +820,7 @@ void TDocumento::on_read(int err, word lockop)
|
||||
set_riga_esenzione();
|
||||
_stato_originale = stato();
|
||||
|
||||
#ifdef LIVE_STATISTICS
|
||||
if (err == NOERR && _has_stat_ven && tipo_valido() && tipo().statistiche() )
|
||||
{
|
||||
const TDoc_key key(head());
|
||||
@ -803,6 +846,7 @@ void TDocumento::on_read(int err, word lockop)
|
||||
_docs_to_agg.remove(key);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
_old_agente.cut(0);
|
||||
_old_agente1.cut(0);
|
||||
@ -1026,7 +1070,7 @@ void TDocumento::dirty_fields()
|
||||
for (int i = righe.last_row(); i > 0; i = righe.pred_row(i))
|
||||
{
|
||||
TRiga_documento& r = (TRiga_documento&)righe[i];
|
||||
r.dirty_fields(FALSE);
|
||||
r.dirty_fields(false);
|
||||
}
|
||||
}
|
||||
_dirty_deny = true;
|
||||
@ -1512,6 +1556,8 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
|
||||
}
|
||||
if (_has_provv && tipo().provvigioni() && tipo().stato_provvigioni() <= stato())
|
||||
myself.update_provvigioni(false);
|
||||
|
||||
#ifdef LIVE_STATISTICS
|
||||
if (_has_stat_ven && tipo().statistiche())
|
||||
{
|
||||
const TDoc_key key(myself.head());
|
||||
@ -1540,13 +1586,16 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
|
||||
st_agg->sub(myself.row(i));
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
// eliminare anche il mov di mag. ??????
|
||||
int TDocumento::remove(TBaseisamfile& f) const
|
||||
{
|
||||
if (!cancellabile() && !yesno_box("Documento non cancellabile,\nContinuare ugualmente"))
|
||||
if (!cancellabile() && !delete_box("Documento non cancellabile.\nSi desidera continuare ugualmente?"))
|
||||
return NOERR;
|
||||
const bool check_movmag = _has_mag && tipo().mov_mag();
|
||||
const bool doc_bloccato = bloccato();
|
||||
@ -1565,7 +1614,6 @@ int TDocumento::remove(TBaseisamfile& f) const
|
||||
if (doc_bloccato)
|
||||
{
|
||||
const int rows = mov.rows();
|
||||
|
||||
for (int i= 1; i <= rows; i++)
|
||||
mov.body()[i].zero(RMOVMAG_TIPORIGA);
|
||||
mov.rewrite(m);
|
||||
@ -1576,6 +1624,7 @@ int TDocumento::remove(TBaseisamfile& f) const
|
||||
}
|
||||
if (!doc_bloccato)
|
||||
{
|
||||
#ifdef LIVE_STATISTICS
|
||||
if (_has_stat_ven && tipo().statistiche())
|
||||
{
|
||||
const TDoc_key key(head());
|
||||
@ -1586,6 +1635,7 @@ int TDocumento::remove(TBaseisamfile& f) const
|
||||
_docs_to_agg.remove(key);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (_has_provv && tipo().provvigioni())
|
||||
{
|
||||
TDocumento& myself = *((TDocumento *)this);
|
||||
@ -3017,6 +3067,8 @@ bool TDocumento::is_nota_credito() const
|
||||
if (tipo().nota_credito())
|
||||
swap = true;
|
||||
else
|
||||
{
|
||||
if (tipo().is_fattura())
|
||||
{
|
||||
const TString4 codcaus(tipo().causale());
|
||||
if (codcaus.full())
|
||||
@ -3032,6 +3084,7 @@ bool TDocumento::is_nota_credito() const
|
||||
swap = ((tiva == iva_vendite) ^ (sez == 'D'));
|
||||
}
|
||||
}
|
||||
}
|
||||
return swap;
|
||||
}
|
||||
|
||||
|
@ -452,6 +452,7 @@ void TTipo_documento::read_formule()
|
||||
_module = prof.get("MODULE", NULL, -1, "ve").left(2);
|
||||
_hca_req = !prof.get_bool("HEAD_CA_OPT");
|
||||
_check_double_art = prof.get_bool("CHECK_DOUBLE_ART");
|
||||
_ignora_anticipi_fatturazione = prof.get_bool("IGNORA_ANTICIPI_FATTURAZIONE");
|
||||
}
|
||||
|
||||
bool TTipo_documento::movimento_interno() const
|
||||
@ -993,7 +994,7 @@ void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & st
|
||||
for (int i = comp.first(); !found && i < items; i = comp.succ(i))
|
||||
{
|
||||
TRiga_esplosione& r = (TRiga_esplosione &) comp[i];
|
||||
const TString c(r.articolo());
|
||||
const TCodice_articolo c = r.articolo();
|
||||
|
||||
if (c.find(substr, pos) > 0)
|
||||
{
|
||||
|
@ -250,7 +250,7 @@ bool TLista_clifo::TClifo::read(char tipo, long cod)
|
||||
|
||||
TLista_clifo::TClifo::TClifo(const TRectype& rec)
|
||||
{
|
||||
CHECK(rec.num() == LF_CLIFO, "Record non clienti");
|
||||
CHECK(rec.num() == LF_CLIFO || rec.num() == LF_DOC, "Record senza TIPOCF e CODCF");
|
||||
const char tipo = rec.get_char(CLI_TIPOCF);
|
||||
const long codice = rec.get_long(CLI_CODCF);
|
||||
read(tipo, codice);
|
||||
@ -313,6 +313,87 @@ int TLista_clifo::leggi(long dc, long ac, long da, long aa, const char * dz, con
|
||||
return _clifo.items();
|
||||
}
|
||||
|
||||
static bool add_filter(TString& filter, const char* name, long da, long al)
|
||||
{
|
||||
if (!(da > 0 || al > da))
|
||||
return false;
|
||||
if (filter.full()) filter << "&&";
|
||||
|
||||
TString16 field = name;
|
||||
if (xvt_str_compare_ignoring_case(name, DOC_CODCF) != 0)
|
||||
field.insert("17->");
|
||||
|
||||
if (da == al)
|
||||
filter << "(" << field << "==" << da << ")"; else
|
||||
if (da <= 0 && al > 0)
|
||||
filter << "(" << field << "<=" << al << ")"; else
|
||||
if (da > 0 && al < da)
|
||||
filter << "(" << field << ">=" << da << ")";
|
||||
else
|
||||
filter << "(BETWEEN(" << field << ',' << da << ',' << al << "))";
|
||||
return true;
|
||||
}
|
||||
|
||||
int TLista_clifo::leggi_doc(const TElaborazione& eld, const TDate& dd, const TDate& ad,
|
||||
long dc, long ac, long da, long aa, const char* dz, const char* az)
|
||||
{
|
||||
if (!dd.ok())
|
||||
return leggi(dc, ac, da, aa, dz, az);
|
||||
|
||||
TRelation doc(LF_DOC);
|
||||
doc.add(LF_CFVEN, "TIPOCF==TIPOCF|CODCF==CODCF");
|
||||
const TRectype& rec = doc.curr();
|
||||
|
||||
TRectype start(rec), stop(rec);
|
||||
start.put(DOC_DATADOC, dd);
|
||||
stop.put (DOC_DATADOC, ad);
|
||||
|
||||
TString filter(127);
|
||||
add_filter(filter, DOC_CODCF, dc, ac);
|
||||
add_filter(filter, CLI_CODAG, da, aa);
|
||||
|
||||
if (dz && (*dz !='\0'))
|
||||
{
|
||||
if (filter.not_empty()) filter << "&&";
|
||||
filter << '(' << LF_CFVEN << "->" << CLI_CODZONA << ">=\"" << dz << "\")";
|
||||
}
|
||||
if (az && (*az !='\0'))
|
||||
{
|
||||
if (filter.not_empty()) filter << "&&";
|
||||
filter << '(' << LF_CFVEN << "->" << CLI_CODZONA << "<=\"" << az << "\")";
|
||||
}
|
||||
|
||||
TCursor cur(&doc, filter, 3, &start, &stop);
|
||||
TBit_array buoni;
|
||||
for (cur = 0; cur.ok(); ++cur)
|
||||
{
|
||||
const char tipocf = rec.get_char(DOC_TIPOCF);
|
||||
const long codcf = rec.get_long(DOC_CODCF);
|
||||
if (tipocf == tipo() && !buoni[codcf])
|
||||
{
|
||||
if (eld.is_document_ok(rec))
|
||||
{
|
||||
TClifo* c = new TClifo(tipocf, codcf);
|
||||
_clifo.add(c, codcf);
|
||||
buoni.set(codcf);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (da > 0 || aa > 0)
|
||||
ordina_per_agente();
|
||||
else
|
||||
{
|
||||
if ((dz && (*dz !='\0')) || (az && (*dz !='\0')))
|
||||
ordina_per_zona();
|
||||
else
|
||||
ordina_per_codice();
|
||||
}
|
||||
|
||||
return _clifo.items();
|
||||
}
|
||||
|
||||
|
||||
int TLista_clifo::leggi_ragsoc(const char *dr, const char * ar, long da, long aa, const char * dz, const char * az)
|
||||
{
|
||||
TRelation clifo(LF_CLIFO);
|
||||
|
@ -48,6 +48,8 @@ public:
|
||||
// Lista Cliente/Fornitore per vendite
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TElaborazione;
|
||||
|
||||
class TLista_clifo : public TObject // velib04
|
||||
{
|
||||
class TClifo : public TObject
|
||||
@ -92,6 +94,8 @@ public:
|
||||
int ordina_per_zona();
|
||||
|
||||
int leggi(long dc, long ac, long da = 0, long aa = 0, const char * dz = "", const char * az = "");
|
||||
int leggi_doc(const TElaborazione& eld, const TDate& dd, const TDate& ad,
|
||||
long dc, long ac, long da=0, long aa=0, const char * dz="", const char * az="");
|
||||
int leggi_ragsoc(const char *dr, const char * ar, long da = 0, long aa = 0, const char * dz = "", const char * az = "");
|
||||
|
||||
long operator[] (int n) const { return clifo(n).codice(); }
|
||||
@ -446,7 +450,7 @@ protected:
|
||||
// Funzione per aggiungere la riga iva al TAssoc_array _righe_iva
|
||||
// error_type add_iva_row(const TBill&, const TRiga_documento&, const int ndec, const real p = 1.0);
|
||||
// Funzione atomica per aggiungere le righe di spese d'incasso e bolli al TAssoc_array _righe_iva
|
||||
void calculate_spese(real&, real&, int, bool, bool, const TString &, const TDocumento & );
|
||||
void calculate_spese(const real&, real&, int, bool, const TString &, const TDocumento & );
|
||||
// Funzione per aggiungere le righe di spese d'incasso e bolli al TAssoc_array _righe_iva (chiama calculate_spese())
|
||||
error_type add_spese_inbo(TDocumento&, const int);
|
||||
// Aggiorna le righe di sconto importo o percentuale
|
||||
|
@ -1,7 +1,5 @@
|
||||
#include "velib04.h"
|
||||
|
||||
#include <dongle.h>
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TFatturazione bolle
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -141,7 +139,7 @@ void TFatturazione_bolle::elabora_riga(TRiga_documento& r, TDocumento& doc_out,
|
||||
r.put(RDOC_RIGAEVASA, true);
|
||||
}
|
||||
|
||||
bool elaborata = false;
|
||||
int sommata = 0;
|
||||
|
||||
// Raggruppo le righe se e' settato il flag di raggruppamento e
|
||||
// se la riga non contiene solo una descrizione
|
||||
@ -156,19 +154,29 @@ void TFatturazione_bolle::elabora_riga(TRiga_documento& r, TDocumento& doc_out,
|
||||
{
|
||||
add_rows(*rout, rin);
|
||||
r.set_final_rdoc_key(*rout);
|
||||
elaborata = true; // Ricorda di averla gia' elaborata
|
||||
sommata = nr; // Ricorda di averla gia' elaborata
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!elaborata) // Se la riga non e' stata gia' sommata ...
|
||||
if (sommata <= 0) // Se la riga non e' stata gia' sommata ...
|
||||
{
|
||||
create_row(doc_out, rin);
|
||||
// Aggiorna collegamento alla riga di destinazione, cioè l'ultima del docuemnto di output
|
||||
TRiga_documento& riga_fatt = doc_out[doc_out.physical_rows()];
|
||||
// Aggiorna collegamento alla riga di destinazione, cioè l'ultima del documento di output
|
||||
const int last_row = doc_out.physical_rows();
|
||||
if (last_row > 0)
|
||||
{
|
||||
TRiga_documento& riga_fatt = doc_out[last_row];
|
||||
if (rin.get(RDOC_CODART) == riga_fatt.get(RDOC_CODART))
|
||||
r.update_rdoc_links(riga_fatt);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TRiga_documento& riga_fatt = doc_out[sommata];
|
||||
r.set_final_rdoc_key(riga_fatt);
|
||||
}
|
||||
}
|
||||
|
||||
bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
|
||||
{
|
||||
@ -204,7 +212,7 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
|
||||
da_elaborare = ddoc >= data_cons && !rin->get_bool(RDOC_RIGAEVASA);
|
||||
}
|
||||
if (!da_elaborare)
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (gestione_riferimenti())
|
||||
@ -307,6 +315,13 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
|
||||
FOR_EACH_PHYSICAL_RDOC(doc_in, r, rin)
|
||||
elabora_riga(*rin, doc_out, usa_dcons, ragg_rig, ignora_desc, campi_riga, dcons, ddoc);
|
||||
|
||||
// 30 Luglio 2015. Hardy non somma gli anticipi da bolla in quanto già contabilizzati, mentre gli altri li sommano tutti (forse)
|
||||
if (!doc_in.tipo().ignora_anticipi_fatturazione())
|
||||
{
|
||||
const real anticipo = doc_in.get_real(DOC_IMPPAGATO);
|
||||
doc_out.add(DOC_IMPPAGATO, anticipo); // Somma tutti gli anticipi versati in bolla
|
||||
}
|
||||
|
||||
//cambio stato documento
|
||||
bool cambia_stato_doc_in = true;
|
||||
if (usa_dcons)
|
||||
@ -340,20 +355,25 @@ bool TFatturazione_bolle::get_num_tip_out(const TDocumento& doc, TString& codnum
|
||||
codnum = codice_numerazione_finale();
|
||||
tipodoc = get_tipo_out(doc);
|
||||
|
||||
// Nel caso di fatture controlla il tipo documento preferito dal cliente
|
||||
const TCodice_numerazione& cn_std = cached_numerazione(codnum);
|
||||
if (cn_std.tipo() == 2)
|
||||
{
|
||||
const TRectype& cfven = doc.clifor().vendite();
|
||||
const TString& tipo_cfv = cfven.get(CFV_TIPODOCFAT);
|
||||
if (tipo_cfv.full())
|
||||
tipodoc = tipo_cfv;
|
||||
}
|
||||
|
||||
const TCodice_numerazione& cn_std = cached_numerazione(codnum);
|
||||
bool ok = cn_std.find_tipo_doc(tipodoc) >= 0;
|
||||
|
||||
if (!ok)
|
||||
{
|
||||
TISAM_recordset num_recset("USE %NUM SELECT I1=2");
|
||||
const TRectype& rec = num_recset.cursor()->curr();
|
||||
for (ok = num_recset.move_first(); ok; ok = num_recset.move_next()) // giro sui vari tipi fattura
|
||||
{
|
||||
const TCodice_numerazione cn_alt(num_recset.cursor()->curr());
|
||||
const TCodice_numerazione cn_alt(rec);
|
||||
if (cn_alt.find_tipo_doc(tipodoc) >= 0)
|
||||
{
|
||||
codnum = cn_alt.codice();
|
||||
@ -525,8 +545,8 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do
|
||||
// td = old_tipo_in; // Ripristino il vecchio
|
||||
|
||||
new_doc->zero(DOC_SPESEUPD); // Senno' non aggiorna le spese automatiche
|
||||
|
||||
new_doc->put(DOC_DATADOC, data_elab);
|
||||
new_doc->zero(DOC_IMPPAGATO); // 30 Luglio 2015 per Hardy
|
||||
|
||||
// Aggiungilo alla lista dei documenti in uscita
|
||||
od = doc_out.add(new_doc);
|
||||
@ -578,7 +598,7 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do
|
||||
|
||||
if (change_clifo())
|
||||
{
|
||||
const TString4 tipodoc(d.tipo().codice());
|
||||
const TString4 tipodoc= d.tipo().codice();
|
||||
TDocumento_mask m(tipodoc);
|
||||
|
||||
if (reload_prices())
|
||||
|
401
ve/velib04b.cpp
401
ve/velib04b.cpp
@ -1,19 +1,10 @@
|
||||
#include "velib04.h"
|
||||
|
||||
#include <comuni.h>
|
||||
#include <unloc.h>
|
||||
|
||||
#include "../ca/calib01.h"
|
||||
#include "../cg/cg2103.h"
|
||||
#include "../cg/cglib02.h"
|
||||
#include "../cg/cgsaldac.h"
|
||||
#include "../in/inlib01.h"
|
||||
|
||||
#include "../ca/movana.h"
|
||||
#include "../m770/scperc.h"
|
||||
#include "../m770/rver.h"
|
||||
#include "../m770/perc.h"
|
||||
|
||||
#include <dongle.h>
|
||||
#include <execp.h>
|
||||
#include <postman.h>
|
||||
@ -21,6 +12,14 @@
|
||||
#include <viswin.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include <comuni.h>
|
||||
#include <unloc.h>
|
||||
#include "../ca/movana.h"
|
||||
#include "../m770/scperc.h"
|
||||
#include "../m770/rver.h"
|
||||
#include "../m770/perc.h"
|
||||
|
||||
|
||||
void TMovimentoPN_VE::destroy_iva_row(int i)
|
||||
{
|
||||
if (i < 0)
|
||||
@ -33,9 +32,9 @@ TImporto TMovimentoPN_VE::real2imp(const real& r, char row_type)
|
||||
{
|
||||
bool dare = false;
|
||||
if (row_type == 'S')
|
||||
dare = _caus->sezione_ritsoc() == 'D';
|
||||
else
|
||||
{
|
||||
dare = _caus->sezione_ritsoc() == 'D'; else
|
||||
if (row_type == 'V')
|
||||
dare = _caus->sezione_revcharge() == 'D'; else
|
||||
if (row_type == 'F')
|
||||
dare = _caus->sezione_ritfis() == 'D';
|
||||
else
|
||||
@ -44,7 +43,7 @@ TImporto TMovimentoPN_VE::real2imp(const real& r, char row_type)
|
||||
if (row_type != 'T' && row_type != 'F' && row_type != 'P')
|
||||
dare = !dare;
|
||||
}
|
||||
}
|
||||
|
||||
TImporto importo(dare ? 'D' : 'A', r);
|
||||
return importo;
|
||||
}
|
||||
@ -52,17 +51,13 @@ TImporto TMovimentoPN_VE::real2imp(const real& r, char row_type)
|
||||
int TMovimentoPN_VE::bill2pos(const TBill& conto, char tipo)
|
||||
{
|
||||
const int items = cg_items();
|
||||
|
||||
for (int i = 0; i < items; i++)
|
||||
{
|
||||
TRectype& s = cg(i);
|
||||
const TRectype& s = cg(i);
|
||||
const char t = s.get_char(RMV_ROWTYPE);
|
||||
if (t == tipo)
|
||||
{
|
||||
const int gr = s.get_int(RMV_GRUPPO);
|
||||
const int co = s.get_int(RMV_CONTO);
|
||||
const long so = s.get_long(RMV_SOTTOCONTO);
|
||||
const TBill c(gr,co,so);
|
||||
const TBill c(s);
|
||||
if (c == conto)
|
||||
return i;
|
||||
}
|
||||
@ -75,7 +70,7 @@ int TMovimentoPN_VE::type2pos(char tipo)
|
||||
const int items = cg_items();
|
||||
for (int i = 0; i < items; i++)
|
||||
{
|
||||
TRectype& s = cg(i);
|
||||
const TRectype& s = cg(i);
|
||||
const char t = s.get_char(RMV_ROWTYPE);
|
||||
if (t == tipo)
|
||||
return i;
|
||||
@ -109,7 +104,7 @@ bool TMovimentoPN_VE::add_cg_rec(int n, const TImporto& imp)
|
||||
int TMovimentoPN_VE::set_cg_rec(int n, const TImporto& imp, const TBill& conto, const char* desc, char tipo)
|
||||
{
|
||||
const bool insert = n < 0;
|
||||
if (insert) n = cg_items(); // Questa e' la prima riga di contabilita' vuota e disponibile
|
||||
if (insert) n = cg_items(); // Questa è la prima riga di contabilita' vuota e disponibile
|
||||
TRectype& rec = cg(n);
|
||||
|
||||
if (insert)
|
||||
@ -204,7 +199,7 @@ void TMovimentoPN_VE::enter_row(int i, const TString& descr_cr)
|
||||
const TBill conto(cur);
|
||||
|
||||
imponibile = imp + impind;
|
||||
if (conto.ok() && !imponibile.is_zero()) // Se c'e' imponibile ...
|
||||
if (conto.ok() && !imponibile.is_zero()) // Se c'è imponibile ...
|
||||
{ // crea una nuova riga contabile
|
||||
// Aggiorna conto sulla riga contabile
|
||||
const TImporto val(real2imp(imponibile, 'I'));
|
||||
@ -212,7 +207,7 @@ void TMovimentoPN_VE::enter_row(int i, const TString& descr_cr)
|
||||
|
||||
if (newpos < 0) // conto non esistente: da inserire
|
||||
{
|
||||
const TString80 d = _caus->desc_agg(2);
|
||||
const TFixed_string d = _caus->desc_agg(2);
|
||||
set_cg_rec(-1, val, conto, d.empty() ? descr_cr : d, 'I');
|
||||
}
|
||||
else
|
||||
@ -221,7 +216,7 @@ void TMovimentoPN_VE::enter_row(int i, const TString& descr_cr)
|
||||
}
|
||||
|
||||
// Aggiorna conto IVA sulla riga contabile
|
||||
if (!iva.is_zero()) // Se c'e' imposta ...
|
||||
if (!iva.is_zero()) // Se c'è imposta ...
|
||||
{
|
||||
const TRectype& head = lfile().curr();
|
||||
int newposiva = type2pos('D'); // IVA detraibile
|
||||
@ -342,30 +337,23 @@ void TMovimentoPN_VE::add_row_tot_re(TDocumento& doc)
|
||||
|
||||
bool TMovimentoPN_VE::add_row_cp_re(int i)
|
||||
{
|
||||
TRectype& cur = cg(i);
|
||||
bool inserted_row = FALSE;
|
||||
|
||||
TBill c;
|
||||
const int gr = cur.get_int(RMV_GRUPPO);
|
||||
const int co = cur.get_int(RMV_CONTO);
|
||||
const long so = cur.get_long(RMV_SOTTOCONTO);
|
||||
|
||||
c.set(gr,co,so);
|
||||
TBill cp;
|
||||
map_conto_re(c);
|
||||
bool inserted_row = false;
|
||||
|
||||
const TRectype& cur = cg(i);
|
||||
TBill c(cur); map_conto_re(c);
|
||||
if (c.ok())
|
||||
{
|
||||
int poscg = bill2pos(c, ' ');
|
||||
if (poscg < 0)
|
||||
{
|
||||
poscg = insert_cg_rec(0, real2imp(ZERO, 'P'), c, _caus->desc_agg(1), ' ');
|
||||
inserted_row = TRUE;
|
||||
inserted_row = true;
|
||||
}
|
||||
TImporto val(real2imp(cur.get_real(RMV_IMPORTO), 'P'));
|
||||
|
||||
add_cg_rec(poscg, val);
|
||||
}
|
||||
|
||||
return inserted_row;
|
||||
}
|
||||
|
||||
@ -405,7 +393,7 @@ bool TMovimentoPN_VE::movement_ok()
|
||||
TImporto tot_imp;
|
||||
TImporto imp;
|
||||
|
||||
// Se siamo in valuta, forzera' la riga totale documento a cio' che si ottiene dalla somma
|
||||
// Se siamo in valuta, forzerà la riga totale documento a ciò che si ottiene dalla somma
|
||||
// delle singole righe per evitare sbilanci nel movimento di 2,3,4,5 lire dovuti agli arrotondamenti
|
||||
const int max = cg_items();
|
||||
for (int i = 0; i < max; i++)
|
||||
@ -447,12 +435,13 @@ bool TMovimentoPN_VE::movement_ok()
|
||||
|
||||
int TMovimentoPN_VE::recalc_cg_rows(const TString& descr_cr, TCausale& caus)
|
||||
{
|
||||
const int righe = iva_items();
|
||||
const int righe_IVA = iva_items();
|
||||
const TRectype& head = curr();
|
||||
|
||||
set_caus(&caus);
|
||||
for (int i=0; i<righe; i++)
|
||||
for (int i=0; i < righe_IVA; i++)
|
||||
enter_row(i, descr_cr);
|
||||
|
||||
bool ok = true;
|
||||
if (_caus->intra() && _caus->iva() == iva_acquisti)
|
||||
{
|
||||
@ -476,7 +465,7 @@ int TMovimentoPN_VE::recalc_cg_rows(const TString & descr_cr, TCausale & caus)
|
||||
ok = c.ok();
|
||||
if (ok)
|
||||
{
|
||||
const TString80 d(_caus->desc_agg(RIGA_RITENUTE_FISCALI));
|
||||
const TString80 d = _caus->desc_agg(RIGA_RITENUTE_FISCALI);
|
||||
const char rowtype = 'F';
|
||||
set_cg_rec(-1, real2imp(ritfis, rowtype), c, d, rowtype);
|
||||
}
|
||||
@ -491,21 +480,44 @@ int TMovimentoPN_VE::recalc_cg_rows(const TString & descr_cr, TCausale & caus)
|
||||
ok = c.ok();
|
||||
if (ok)
|
||||
{
|
||||
const TString80 d(_caus->desc_agg(RIGA_RITENUTE_SOCIALI));
|
||||
const TString80 d = _caus->desc_agg(RIGA_RITENUTE_SOCIALI);
|
||||
const char rowtype = 'S';
|
||||
set_cg_rec(-1, real2imp(ritsoc, rowtype), c, d, rowtype);
|
||||
}
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
const real revchg = head.get_real(MOV_REVCHARGE);
|
||||
if (!revchg.is_zero())
|
||||
{
|
||||
TBill c; _caus->bill(RIGA_REVERSE_CHARGE, c);
|
||||
ok = c.ok();
|
||||
if (ok)
|
||||
{
|
||||
const TString80 d = _caus->desc_agg(RIGA_REVERSE_CHARGE);
|
||||
const char rowtype = 'V';
|
||||
set_cg_rec(-1, real2imp(revchg, rowtype), c, d, rowtype);
|
||||
}
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (_caus->tipomov() == 1) // Elimina eventuali righe vuote dalle fatture
|
||||
}
|
||||
|
||||
if (_caus->tipomov() == tm_fattura) // Elimina eventuali righe vuote dalle fatture
|
||||
{
|
||||
const bool is_zero_doc = (righe_IVA > 0) && head.get_real(MOV_TOTDOC).is_zero();
|
||||
for (int c = cg_items()-1; c >= 0; c--)
|
||||
{
|
||||
const TImporto imp = get_cg_imp(c);
|
||||
if (imp.is_zero())
|
||||
bool can_delete = imp.is_zero();
|
||||
if (can_delete && is_zero_doc)
|
||||
{
|
||||
const TRectype& s = cg(c);
|
||||
can_delete = s.get_char(RMV_ROWTYPE) != 'T';
|
||||
}
|
||||
if (can_delete)
|
||||
destroy_cg_row(c);
|
||||
}
|
||||
}
|
||||
@ -521,8 +533,8 @@ static TBill _co_cliente, // conto clifo per movimento d'anticipo
|
||||
_co_controp; // conto di contropartita per il movimetno d'anticipo
|
||||
|
||||
static bool _nump_cfg; // se true prende il numero rif. partita dal numero protocollo
|
||||
static bool _sc_enabled; // se true il saldaconto di ditta e' abilitato
|
||||
static bool _in_enabled; // se true l'intra e' abilitato
|
||||
static bool _sc_enabled; // se true il saldaconto di ditta è abilitato
|
||||
static bool _in_enabled; // se true l'intra è abilitato
|
||||
static TToken_string* _search_seq = NULL;
|
||||
// Sequenza di ricerca del conto costo/ricavo la correttezza dell'ordinamento
|
||||
// va controllata nel programma di modifica parametri:
|
||||
@ -536,7 +548,7 @@ static TToken_string* _search_seq = NULL;
|
||||
// CV = categoria di vendita
|
||||
// CC = categoria contabile
|
||||
// Gli utlimi 6 fanno parte della ricerca per costi ricavi, in particolare AR,GM,SM e RF
|
||||
// non possono essere interrotti da CV o CC. Ad es. CA|CF|AR|CV|GM|CC|RF non e' valida come stringa
|
||||
// non possono essere interrotti da CV o CC. Ad es. CA|CF|AR|CV|GM|CC|RF non è valida come stringa
|
||||
// di ricerca.
|
||||
static TString4 _iva_sto; // Codice IVA per storno articoli Omaggio
|
||||
static TBill _conto_sto; // Conto per storno articoli Omaggio
|
||||
@ -598,7 +610,6 @@ error_type TIVA_array::add_omaggi(const TRiga_documento& r, const TBill& conto,
|
||||
error_type TIVA_array::add(const TRiga_documento& r, const TBill& conto, const int ndec, const real& p)
|
||||
{
|
||||
const TTipo_riga_documento & t = r.tipo();
|
||||
TString80 key;
|
||||
const TCodiceIVA& tiva = r.iva();
|
||||
const TString4 cod = tiva.codice();
|
||||
TBill c(conto);
|
||||
@ -612,7 +623,7 @@ error_type TIVA_array::add(const TRiga_documento& r, const TBill& conto, const i
|
||||
|
||||
if (rdoc != NULL && rdoc->get(RDOC_PROVV).not_empty())
|
||||
{
|
||||
TString80 key(rdoc->get(RDOC_CODNUM));
|
||||
TString80 key = rdoc->get(RDOC_CODNUM);
|
||||
|
||||
const TCodice_numerazione& num = cached_numerazione(key);
|
||||
if (num.fattura_emettere_ricevere())
|
||||
@ -685,13 +696,11 @@ error_type TIVA_array::add(const TRiga_documento& r, const TBill& conto, const i
|
||||
break;
|
||||
}
|
||||
|
||||
impon *= p;
|
||||
impon.round(firmdec); // was ndec
|
||||
|
||||
impon *= p; impon.round(firmdec); // was ndec
|
||||
if (impon.is_zero())
|
||||
return no_error;
|
||||
|
||||
real imposta = tiva.imposta(impon, ndec);
|
||||
const real imposta = tiva.imposta(impon, ndec);
|
||||
|
||||
// Le righe di sconto ad importo o percentuale vanno saltate
|
||||
// Casistica sulle righe omaggio:
|
||||
@ -700,10 +709,21 @@ error_type TIVA_array::add(const TRiga_documento& r, const TBill& conto, const i
|
||||
// una riga IVA con lo stesso imponibile ma di segno opposto, con un cod. IVA
|
||||
// speciale per lo storno, proveniente da configurazione
|
||||
|
||||
const TString4 tipodet(r.get(RDOC_TIPODET));
|
||||
const TString4 tipodet = r.get(RDOC_TIPODET);
|
||||
|
||||
TString80 key;
|
||||
key.format("%d|%-4s|%c|%3d|%3d|%6ld|%s",
|
||||
ord,(const char*)cod,c.tipo(),c.gruppo(),c.conto(),c.sottoconto(), (const char*)tipodet);
|
||||
|
||||
// Nel caso di documenti a zero tiene distinte IVA positiva e negativa
|
||||
if (r.doc().totale_doc().is_zero())
|
||||
{
|
||||
if (impon < ZERO)
|
||||
key << "|-";
|
||||
else
|
||||
key << "|+";
|
||||
}
|
||||
|
||||
TRectype* iva = (TRectype*)objptr(key);
|
||||
|
||||
if (iva == NULL)
|
||||
@ -718,14 +738,10 @@ error_type TIVA_array::add(const TRiga_documento& r, const TBill& conto, const i
|
||||
iva->put(RMI_SOTTOCONTO, c.sottoconto());
|
||||
TAssoc_array::add(key, iva, true);
|
||||
}
|
||||
real val = iva->get_real(RMI_IMPONIBILE);
|
||||
|
||||
val += impon;
|
||||
iva->put(RMI_IMPONIBILE, val);
|
||||
iva->add(RMI_IMPONIBILE, impon);
|
||||
iva->put(RMI_TIPODET, tipodet);
|
||||
val = iva->get_real(RMI_IMPOSTA);
|
||||
val += imposta;
|
||||
iva->put(RMI_IMPOSTA, val);
|
||||
iva->add(RMI_IMPOSTA, imposta);
|
||||
if (ord != 5)
|
||||
{
|
||||
if (sconto_lordo) // Se e' settato il flag di contabilizzare anche gli sconti merce
|
||||
@ -833,7 +849,7 @@ bool TContabilizzazione::load_parameters()
|
||||
// il tutto.
|
||||
|
||||
if (_search_seq->empty_items())
|
||||
return error_box(TR("Non e' abilitata alcuna ricerca per il conto di costo/ricavo in configurazione."));
|
||||
return error_box(TR("Non è abilitata alcuna ricerca per il conto di costo/ricavo in configurazione."));
|
||||
|
||||
_sc_enabled = conf.get_bool("GesSal","cg");
|
||||
_in_enabled = dongle().active(INAUT);
|
||||
@ -1136,7 +1152,7 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
|
||||
_error = caus_error;
|
||||
return _error;
|
||||
}
|
||||
_righe_iva->set_caus(_caus);
|
||||
//_righe_iva->set_caus(_caus); // Appena fatto sopra
|
||||
|
||||
if (doc.in_valuta() && !_caus->valuta())
|
||||
{
|
||||
@ -1179,7 +1195,7 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
|
||||
}
|
||||
|
||||
// Codice registro IVA
|
||||
TRegistro& registro = _caus->reg();
|
||||
const TRegistro& registro = _caus->reg();
|
||||
const bool iva_mov = registro.ok();
|
||||
long ult_prot = 0;
|
||||
|
||||
@ -1365,21 +1381,19 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
|
||||
if (doc.tipo().nota_credito())
|
||||
{
|
||||
TDate d = doc.get_date(DOC_DATADOCRIF);
|
||||
if (d.ok())
|
||||
if (d.ok() && d < data_reg)
|
||||
dataintra = d;
|
||||
}
|
||||
mov_rec.put(MOV_DATACOMPI, dataintra);
|
||||
}
|
||||
else
|
||||
{
|
||||
const int reg_spec = _caus->regime_speciale();
|
||||
if (reg_spec == 13 || reg_spec == 50 || reg_spec == 51) // reverse charge
|
||||
if (_caus->reverse_charge())
|
||||
{
|
||||
TCurrency_documento imposta(doc.imposta(), doc);
|
||||
totdocval -= imposta;
|
||||
|
||||
imposta.change_to_firm_val();
|
||||
mov_rec.put(MOV_RITFIS, imposta.get_num());
|
||||
mov_rec.put(MOV_REVCHARGE, imposta.get_num()); // 15-12-2015 was MOV_RITFIS
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1412,7 +1426,7 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
|
||||
if (doc.tipo().nota_credito())
|
||||
{
|
||||
const TDate d = doc.get_date(DOC_DATADOCRIF);
|
||||
if (d.ok())
|
||||
if (d.ok() && d < data_reg)
|
||||
dataintra = d;
|
||||
}
|
||||
mov_rec.put(MOV_DATACOMPI, dataintra);
|
||||
@ -1744,11 +1758,13 @@ error_type TContabilizzazione::search_costo_ricavo(TBill& conto, const TRiga_doc
|
||||
if (tok == "VM")
|
||||
{
|
||||
if (!is_cli) continue; // se non e' un cliente salta questa condizione
|
||||
// Costruisco il codice Categoria conto vendite artioli(3)+Categoria di vendita cliente(2)
|
||||
// Costruisco il codice Categoria conto vendite articoli(3)+Categoria di vendita cliente(2)
|
||||
TString4 catven = r.doc().get(DOC_CATVEN);
|
||||
if (catven.blank())
|
||||
catven = _clifo->curr(LF_CFVEN).get(CFV_CATVEN);
|
||||
|
||||
TString8 cod = _anamag->get(ANAMAG_CATCONV);
|
||||
|
||||
cod << _clifo->curr(LF_CFVEN).get(CFV_CATVEN);
|
||||
|
||||
cod.left_just(3) << catven;
|
||||
const TRectype* t = &cache().get("&CVM", cod);
|
||||
|
||||
if (!t->empty())
|
||||
@ -1891,8 +1907,9 @@ error_type TContabilizzazione::search_costo_ricavo_mat(TBill& conto, const TRiga
|
||||
return _error;
|
||||
}
|
||||
|
||||
void TContabilizzazione::calculate_spese(real& spese, real& sp_iva, int ndec, bool is_incasso, bool is_cli, const TString & codiva_es, const TDocumento & doc)
|
||||
void TContabilizzazione::calculate_spese(const real& spese, real& sp_iva, int ndec, bool is_incasso, const TString& codiva_es, const TDocumento & doc)
|
||||
{
|
||||
const bool is_cli = doc.get_char(DOC_TIPOCF) != 'F';
|
||||
const TBill& zio = is_incasso ? (is_cli ? _spin_billv : _spin_billa) : (is_cli ? _spbo_billv : _spbo_billa);
|
||||
|
||||
if (zio.ok())
|
||||
@ -1918,29 +1935,30 @@ void TContabilizzazione::calculate_spese(real& spese, real& sp_iva, int ndec, bo
|
||||
_error = spinbo_error;
|
||||
}
|
||||
|
||||
error_type TContabilizzazione::add_spese_inbo(TDocumento& doc, const int ndec)
|
||||
// Aggiunge le righe di spese incasso/bolli
|
||||
error_type TContabilizzazione::add_spese_inbo(TDocumento& doc, const int ndec)
|
||||
{
|
||||
real tot_netto, sp_incasso, sp_bolli;
|
||||
real iva_sp_incasso, iva_sp_bolli;
|
||||
const real rit = doc.ritenute();
|
||||
const bool is_cli = doc.get_char(DOC_TIPOCF) == 'C';
|
||||
real tot_netto = doc.totale_netto();
|
||||
|
||||
// Aggiunge le spese d'incasso
|
||||
tot_netto = doc.totale_netto();
|
||||
sp_incasso = doc.spese_incasso(tot_netto, ndec, _netto);
|
||||
TString4 codiva_es;
|
||||
|
||||
doc.iva_esente(codiva_es);
|
||||
|
||||
real sp_incasso = doc.spese_incasso(tot_netto, ndec, _netto);
|
||||
real iva_sp_incasso;
|
||||
if (!sp_incasso.is_zero())
|
||||
calculate_spese(sp_incasso,iva_sp_incasso,ndec,true,is_cli, codiva_es.not_empty() ? codiva_es : doc.codiva_spese(), doc);
|
||||
{
|
||||
TString4 codiva_es; doc.iva_esente(codiva_es);
|
||||
calculate_spese(sp_incasso,iva_sp_incasso,ndec,true,codiva_es.full() ? codiva_es : doc.codiva_spese(), doc);
|
||||
}
|
||||
|
||||
const real rit = doc.ritenute();
|
||||
tot_netto += sp_incasso + iva_sp_incasso - rit;
|
||||
|
||||
// Aggiunge le spese bolli
|
||||
tot_netto += sp_incasso + iva_sp_incasso - rit;
|
||||
sp_bolli = doc.bolli(tot_netto, ndec, _netto);
|
||||
real sp_bolli = doc.bolli(tot_netto, ndec, _netto);
|
||||
if (!sp_bolli.is_zero())
|
||||
calculate_spese(sp_bolli, iva_sp_bolli, ndec, false, is_cli, doc.codiva_bolli(), doc);
|
||||
{
|
||||
real iva_sp_bolli;
|
||||
calculate_spese(sp_bolli, iva_sp_bolli, ndec, false, doc.codiva_bolli(), doc);
|
||||
}
|
||||
|
||||
return _error;
|
||||
}
|
||||
@ -2181,10 +2199,9 @@ error_type TContabilizzazione::create_iva_rows(TDocumento& doc)
|
||||
imponibile = imponval.get_num(); // imponibile in lire
|
||||
TCurrency_documento impval(imposta, doc);
|
||||
impval.change_to_firm_val();
|
||||
|
||||
imposta = impval.get_num(); // questa e' l'imposta ricalcolata
|
||||
}
|
||||
if (imponibile != ZERO && codiva.full())
|
||||
if (!imponibile.is_zero() && codiva.full())
|
||||
{
|
||||
TRectype& rec_iva = _movimento->iva(nr);
|
||||
rec_iva.put(RMI_ANNOES,annoes);
|
||||
@ -2335,6 +2352,8 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
|
||||
_righe_iva->destroy(); // resetta l'assoc_array delle righe di iva
|
||||
_totali_lordi.destroy();// resetta l'assoc_array dei totali lordi
|
||||
|
||||
const TString16 fldvalmat = ini_get_string(CONFIG_DITTA, "ve", "FldValMat", "");
|
||||
|
||||
for (int i=1; good() && i<=rows; i++) // browse all this fucked document rows
|
||||
{
|
||||
TRiga_documento& r = doc[i];
|
||||
@ -2362,12 +2381,7 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
|
||||
continue;
|
||||
search_costo_ricavo(conto, r, amount_to_split, r.imponibile()); // l'errore eventuale viene settato qui dentro
|
||||
|
||||
if (good())
|
||||
{
|
||||
static TString16 fldvalmat("883");
|
||||
if (fldvalmat == "883")
|
||||
fldvalmat = ini_get_string(CONFIG_DITTA, "ve", "FldValMat", "");
|
||||
if (fldvalmat.full())
|
||||
if (good() && fldvalmat.full())
|
||||
{
|
||||
pricemat = real(cache().get(LF_ANAMAG, r.get(RDOC_CODARTMAG), fldvalmat));
|
||||
if (!pricemat.is_zero())
|
||||
@ -2377,7 +2391,6 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (good())
|
||||
{
|
||||
if (fat_com)
|
||||
@ -2482,9 +2495,10 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
|
||||
|
||||
}
|
||||
|
||||
if (amount_to_split != ZERO)
|
||||
if (!amount_to_split.is_zero())
|
||||
split_sp_amount(amount_to_split, ndec);
|
||||
|
||||
// Non ammette assenza righe IVA
|
||||
if (good() && _righe_iva->empty())
|
||||
_error = no_rows_error;
|
||||
|
||||
@ -2523,24 +2537,18 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
|
||||
const bool iva_mov = registro.ok();
|
||||
if (!iva_mov)
|
||||
{
|
||||
static int __check_sez = -1;
|
||||
if (__check_sez < 0)
|
||||
__check_sez = ini_get_bool(CONFIG_DITTA, "ve", "CHECK_SEZ");
|
||||
const bool check_sez = ini_get_bool(CONFIG_DITTA, "ve", "CHECK_SEZ");
|
||||
bool swap = false;
|
||||
|
||||
if (__check_sez)
|
||||
if (check_sez)
|
||||
{
|
||||
const TString4 sz = _movimento->cg(0).get(RMV_SEZIONE);
|
||||
|
||||
for (int row = 1; !swap && row <= doc.physical_rows(); row++)
|
||||
{
|
||||
const TRiga_documento& r = doc[row];
|
||||
|
||||
if (r.is_spese())
|
||||
{
|
||||
const TSpesa_prest s(r.get(RDOC_CODART));
|
||||
const TString& sez = s.get("S11");
|
||||
|
||||
swap = sez == sz;
|
||||
}
|
||||
}
|
||||
@ -2551,10 +2559,10 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
|
||||
{
|
||||
TRectype& rec_cg = _movimento->cg(i);
|
||||
rec_cg.zero(RMV_ROWTYPE);
|
||||
if (__check_sez && swap)
|
||||
if (check_sez && swap)
|
||||
{
|
||||
const TString4 sez = rec_cg.get(RMV_SEZIONE);
|
||||
rec_cg.put(RMV_SEZIONE, sez == "D" ? "A" :"D");
|
||||
const char sez = rec_cg.get_char(RMV_SEZIONE);
|
||||
rec_cg.put(RMV_SEZIONE, sez == 'D' ? 'A' : 'D');
|
||||
}
|
||||
}
|
||||
_movimento->destroy_iva_row();
|
||||
@ -2598,7 +2606,7 @@ error_type TContabilizzazione::compile_rows_mov_re(TDocumento& doc)
|
||||
}
|
||||
split_sp_amount(amount_to_split, ndec);
|
||||
|
||||
if (good() && _righe_iva->items() == 0)
|
||||
if (good() && _righe_iva->empty())
|
||||
_error = no_rows_error;
|
||||
|
||||
// Crea le righe per le spese d'incasso e bolli
|
||||
@ -2734,7 +2742,7 @@ error_type TContabilizzazione::write_scadenze(TDocumento& doc, bool recontabiliz
|
||||
TPartita* newgame = NULL;
|
||||
if (anno > 0 && numpart.full())
|
||||
{
|
||||
const int tmov = _caus->tipomov();
|
||||
const tipo_movimento tmov = _caus->tipomov();
|
||||
const TString80 desc(head.get(MOV_DESCR));
|
||||
const TString4 codcaus(_caus->codice());
|
||||
const TString4 v(head.get(MOV_CODVAL));
|
||||
@ -2751,6 +2759,8 @@ error_type TContabilizzazione::write_scadenze(TDocumento& doc, bool recontabiliz
|
||||
int row = 0;
|
||||
if (tmov == tm_fattura)
|
||||
row = newgame->prima_fattura(nreg); // Riga fattura di questo movimento
|
||||
else
|
||||
row = newgame->prima_riga(nreg, tmov); // Riga nc di questo movimento
|
||||
TRiga_partite& partita = row <= 0 ? newgame->new_row() : newgame->riga(row);
|
||||
const int nuova_riga = partita.get_int(PART_NRIGA);
|
||||
|
||||
@ -2919,7 +2929,7 @@ error_type TContabilizzazione::write_scadenze(TDocumento& doc, bool recontabiliz
|
||||
// scadenza.put(SCAD_DESCR, ????); // Note
|
||||
}
|
||||
} // if fattura
|
||||
else if (doc.is_nota_credito())
|
||||
else if (is_nc)
|
||||
{
|
||||
TImporto residuoval(sezione, doc.totale_doc());
|
||||
TImporto residuolit(sezione, abs(totdoc));
|
||||
@ -3208,7 +3218,9 @@ error_type TContabilizzazione::write_all(TDocumento& doc, TMovimentoPN_VE & movi
|
||||
msg << TR(" protocollo IVA ") << protiva;
|
||||
_viswin->add_line(msg);
|
||||
|
||||
if (_caus->iva() == iva_acquisti && _caus->causale_reg_iva().full() && doc.clifor().get_long(CLI_CODCFASS) > 0)
|
||||
if (_caus->iva() == iva_acquisti && _caus->causale_reg_iva().full())
|
||||
{
|
||||
if (doc.clifor().get_long(CLI_CODCFASS) > 0)
|
||||
{
|
||||
TMovimentoPN movreg;
|
||||
const error_type err = write_regolarizzazione(doc, movreg);
|
||||
@ -3219,6 +3231,12 @@ error_type TContabilizzazione::write_all(TDocumento& doc, TMovimentoPN_VE & movi
|
||||
_viswin->add_line(msg);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
msg.format(FR("*** Causale con regolarizzazione in assenza di cliente associato al fornitore %ld"), doc.codcf());
|
||||
_viswin->add_line(msg);
|
||||
}
|
||||
}
|
||||
|
||||
call_exe(doc, movimento);
|
||||
}
|
||||
@ -3741,11 +3759,11 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
|
||||
{
|
||||
const TRectype& rm = _movimento->curr();
|
||||
|
||||
// Controllo la liceita' della scrittura del moviemnto intra
|
||||
const TDate data_reg = rm.get(MOV_DATAREG);
|
||||
TDate data_intra = rm.get(MOV_DATACOMPI);
|
||||
|
||||
if (data_intra < data_reg)
|
||||
/* Ora so fare le rettifiche! 29-09-2015
|
||||
// Controllo la liceita' della scrittura del movimento intra
|
||||
const TDate data_intra = rm.get(MOV_DATACOMPI);
|
||||
if (data_intra.ok() && data_intra < data_reg)
|
||||
{
|
||||
TIntra_frequency freq;
|
||||
const char tipo_intra = _caus->iva() == iva_acquisti ? 'A' : 'C';
|
||||
@ -3757,6 +3775,7 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
|
||||
return _error; // Non posso fare movimenti, ma devo fare rettifiche
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// Scrive il movimento INTRA raggruppando per NATURA+NOMENCLATURA+CONSEGNA+TRASPORTO+PAESE+PAESEORIG+PROV
|
||||
// Siccome NATURA, CONSEGNA, TRASPORTO e PAESE sono relativi alla testata del documento,
|
||||
@ -3777,31 +3796,34 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
|
||||
const int trasporto = por_rec.get_int("I0"); // tipo di trasporto...
|
||||
const char natura = doc.tipo().get("S3")[3]; // natura della transazione, valida per tutte le righe del documento
|
||||
const long numreg = rm.get_long(MOV_NUMREG);
|
||||
TString16 nomenclatura, ums, paeseorig, provincia, paese;
|
||||
real totale_righe, massanun, unsuppun;
|
||||
const real cambio = doc.cambio();
|
||||
const bool is_val = doc.in_valuta();
|
||||
const bool is_cessione = rm.get_char(MOV_TIPO)=='C';
|
||||
const bool nota_credito = doc.tipo().nota_credito();
|
||||
|
||||
paese = _clifo->lfile().get(CLI_STATOPAIV); // Paese del cliente/fornitore...
|
||||
const TString4 paese = _clifo->curr().get(CLI_STATOPAIV); // Paese del cliente/fornitore...
|
||||
|
||||
// Scorre le righe documento (prendendo solamente quelle relative agli articoli veri e propri)
|
||||
// Effettuando il raggruppamento in un comodo TAssoc_array
|
||||
TToken_string key;
|
||||
const int items = doc.physical_rows();
|
||||
int numrig = 1;
|
||||
for (int i=1; i<=items; i++)
|
||||
FOR_EACH_PHYSICAL_RDOC(doc, i, prdoc) if (prdoc->is_articolo())
|
||||
{
|
||||
const TRiga_documento& rr = doc[i];
|
||||
if (rr.is_articolo())
|
||||
{
|
||||
const TRectype& rec_anamag = cchh.get(LF_ANAMAG, rr.get(RDOC_CODARTMAG));
|
||||
nomenclatura = rec_anamag.get(ANAMAG_CLASSDOG);
|
||||
ums = cchh.get("%NOC", nomenclatura, "S5");
|
||||
massanun = rec_anamag.get_real(ANAMAG_MASSANUN); // Massa KG
|
||||
unsuppun = rec_anamag.get_real(ANAMAG_UNSUPPUN); // Massa UMS
|
||||
paeseorig = !is_cessione ? rec_anamag.get(ANAMAG_PAESE) : EMPTY_STRING; // Campo solo per Acquisti
|
||||
const TString16 nomenclatura = rec_anamag.get(ANAMAG_CLASSDOG);
|
||||
|
||||
const TRectype& rec_noc = cchh.get("%NOC", nomenclatura);
|
||||
const char noc_s4 = rec_noc.get_char("S4"); // Obbligatorietà unità di misura supplementare
|
||||
bool ums_obbl = noc_s4 > ' ';
|
||||
if (ums_obbl && noc_s4 != 'E')
|
||||
ums_obbl = is_cessione ? noc_s4=='C' : noc_s4=='A';
|
||||
|
||||
const TString4 ums = rec_noc.get("S5");
|
||||
const real massanun = rec_anamag.get_real(ANAMAG_MASSANUN); // Massa KG
|
||||
const real unsuppun = rec_anamag.get_real(ANAMAG_UNSUPPUN); // Massa UMS
|
||||
const TString16 paeseorig = is_cessione ? EMPTY_STRING : rec_anamag.get(ANAMAG_PAESE); // Campo solo per Acquisti
|
||||
TString4 provincia;
|
||||
if (is_cessione)
|
||||
provincia = rec_anamag.get(ANAMAG_PROV);
|
||||
else
|
||||
@ -3819,7 +3841,7 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
|
||||
provincia = cchh.get(LF_COMUNI, key, COM_PROVCOM);
|
||||
}
|
||||
|
||||
if (nomenclatura.blank() || unsuppun.is_zero() || massanun.is_zero() || provincia.blank())
|
||||
if (nomenclatura.blank() || (ums_obbl && unsuppun.is_zero() && ums.blank()) || massanun.is_zero() || provincia.blank())
|
||||
{
|
||||
TString msg;
|
||||
msg << "--- L'articolo " << rec_anamag.get(ANAMAG_CODART) << " non riporta tutti i dati necessari per il movimento intracomunitario.";
|
||||
@ -3828,7 +3850,7 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
|
||||
_viswin->add_line(msg);
|
||||
msg = " ";
|
||||
if (nomenclatura.blank()) msg << "nomenclatura combinata; ";
|
||||
if (unsuppun.is_zero()) msg << "unità di misura supplementare; ";
|
||||
if (ums_obbl && unsuppun.is_zero()) msg << "unità di misura supplementare; ";
|
||||
if (massanun.is_zero()) msg << "massa netta unitaria; ";
|
||||
if (provincia.blank()) msg << (is_cessione ? "provincia d'origine; " : "provincia di destinazione; ");
|
||||
msg.rtrim(2); msg << '.'; // Sostituisce l'ultimo punto e virgola con un punto
|
||||
@ -3839,7 +3861,7 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
|
||||
key.add(nomenclatura);
|
||||
key.add(paeseorig);
|
||||
key.add(provincia);
|
||||
TRectype* rc = (TRectype*) righe.objptr(key);
|
||||
TRectype* rc = (TRectype*)righe.objptr(key); // Riga intra
|
||||
if (rc == NULL)
|
||||
{
|
||||
rc = new TRectype(LF_RINTRA);
|
||||
@ -3849,18 +3871,18 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
|
||||
rc->put("CONSEGNA", consegna);
|
||||
rc->put("TRASPORTO", trasporto);
|
||||
|
||||
rc->put("UMS", ums);
|
||||
rc->put("NOMENCL", nomenclatura);
|
||||
rc->put("UMS", ums);
|
||||
rc->put("PAESE", paese);
|
||||
rc->put("PAESEORIG", paeseorig);
|
||||
rc->put("PROV", provincia);
|
||||
righe.add(key, rc);
|
||||
}
|
||||
const real qta = rr.get_real(RDOC_QTA);
|
||||
TCurrency_documento imp_val(rr.exist("VALINTRA") ? rr.get_real("VALINTRA") : rr.importo(true, false), doc);
|
||||
TCurrency_documento imp_val(rr.TVariable_rectype::exist("VALINTRA") ? rr.get_real("VALINTRA") : rr.importo(true, false), doc);
|
||||
TCurrency_documento imp(imp_val); imp.change_to_firm_val();
|
||||
imp_val.change_value(codvali, cambioi);
|
||||
real ammlire = rc->get_real("AMMLIRE");
|
||||
real ammeuro = rc->get_real("AMMLIRE");
|
||||
real ammvaluta = rc->get_real("AMMVALUTA");
|
||||
real massakg = rc->get_real("MASSAKG");
|
||||
real massaums = rc->get_real("MASSAUMS");
|
||||
@ -3868,45 +3890,77 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
|
||||
|
||||
if (nota_credito)
|
||||
{
|
||||
ammlire -= imp.get_num();
|
||||
ammeuro -= imp.get_num();
|
||||
ammvaluta -= is_val ? imp_val.get_num() : ZERO;
|
||||
}
|
||||
else
|
||||
{
|
||||
ammlire += imp.get_num();
|
||||
ammeuro += imp.get_num();
|
||||
ammvaluta += is_val ? imp_val.get_num() : ZERO;
|
||||
}
|
||||
massakg += qta * massanun;
|
||||
massaums += qta * unsuppun;
|
||||
|
||||
if (rr.exist("VALSTAT"))
|
||||
real peso = qta * massanun; // peso netto
|
||||
if (peso.is_zero())
|
||||
peso = rr.get_real(RDOC_PNETTO);
|
||||
massakg += peso;
|
||||
|
||||
if (ums_obbl || ums.full() || !unsuppun.is_zero())
|
||||
{
|
||||
real qta_ums;
|
||||
// Campo Fisico o Formulato? TAuto_variable_rectype::exist("MASSAUMS") è sempre TRUE!
|
||||
if (rr.TVariable_rectype::exist("MASSAUMS"))
|
||||
qta_ums = rr.get_real("MASSAUMS");
|
||||
else
|
||||
{
|
||||
// Cerco di convertire l'unità di misura su rdoc nella unità di misura supplementare
|
||||
const TString4 um = rr.get(RDOC_UMQTA);
|
||||
if (ums.full() && um.full())
|
||||
{
|
||||
if (ums == um) // Se coincidono, ho già finito ...
|
||||
qta_ums = qta;
|
||||
else
|
||||
{
|
||||
TArticolo& art = rr.articolo();
|
||||
qta_ums = art.convert_to_um(qta, ums, um); // ... altrimenti converto
|
||||
}
|
||||
}
|
||||
}
|
||||
if (qta_ums.is_zero()) // Se non sono riuscito in altro modo ...
|
||||
qta_ums = qta * unsuppun; // ... calcolo peso/qta in unità di misura supplementare
|
||||
|
||||
massaums += qta_ums;
|
||||
}
|
||||
|
||||
real vs; // Valore statistico
|
||||
// Campo Fisico o Formulato? TAuto_variable_rectype::exist("VALSTAT") è sempre TRUE!
|
||||
if (rr.TVariable_rectype::exist("VALSTAT"))
|
||||
{
|
||||
TCurrency_documento vstat(rr.get_real("VALSTAT"), doc);
|
||||
vstat.change_to_firm_val();
|
||||
if (nota_credito)
|
||||
valstat -= vstat.get_num();
|
||||
else
|
||||
valstat += vstat.get_num();
|
||||
vs = vstat.get_num();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (nota_credito)
|
||||
valstat -= qta * rec_anamag.get_real(ANAMAG_VALSTATUN);
|
||||
else
|
||||
valstat += qta * rec_anamag.get_real(ANAMAG_VALSTATUN);
|
||||
vs = qta * rec_anamag.get_real(ANAMAG_VALSTATUN);
|
||||
if (vs.is_zero())
|
||||
vs = imp.get_num();
|
||||
}
|
||||
if (nota_credito)
|
||||
valstat -= vs;
|
||||
else
|
||||
valstat += vs;
|
||||
|
||||
rc->put("AMMLIRE", ammlire);
|
||||
rc->put("AMMLIRE", ammeuro);
|
||||
rc->put("AMMVALUTA", ammvaluta);
|
||||
rc->put("MASSAKG", massakg);
|
||||
rc->put("MASSAUMS", massaums);
|
||||
rc->put("VALSTAT", valstat);
|
||||
|
||||
// Il totale delle righe in Euro!
|
||||
if (nota_credito)
|
||||
totale_righe -= imp.get_num(); // Il totale delle righe in Euro!
|
||||
totale_righe -= imp.get_num();
|
||||
else
|
||||
totale_righe += imp.get_num(); // Il totale delle righe in Euro!
|
||||
}
|
||||
totale_righe += imp.get_num();
|
||||
}
|
||||
|
||||
if (_error == no_error)
|
||||
@ -3925,23 +3979,19 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
|
||||
intra.put("TIPOCF", rm.get(MOV_TIPO));
|
||||
intra.put("CODCF", rm.get_long(MOV_CODCF));
|
||||
intra.put("TOTDOC", totale_righe);
|
||||
// intra.put("TOTDOC", rm.get_real(MOV_TOTDOC));
|
||||
intra.put("TOTDOCIMM", totale_righe);
|
||||
if (_caus->valintra() && codvali.empty())
|
||||
if (_caus->valintra() && ::is_euro_value(codvali))
|
||||
{
|
||||
TString4 codval(TCurrency::get_firm_val());
|
||||
|
||||
TString4 codval = TCurrency::get_firm_val();
|
||||
if (codval.empty())
|
||||
codval = TCurrency::get_euro_val();
|
||||
intra.put("CODVAL", codval);
|
||||
}
|
||||
else
|
||||
intra.put("CODVAL", codvali);
|
||||
|
||||
intra.put("CAMBIO", cambioi);
|
||||
if (intra.write() == _isreinsert) // Succede con le ricontabilizzazioni
|
||||
intra.rewrite(); // si effettua una riscrittura
|
||||
|
||||
intra.write_rewrite(); // rewrite succede con le ricontabilizzazioni
|
||||
if (intra.status() == NOERR)
|
||||
{
|
||||
// righe!
|
||||
@ -4446,7 +4496,7 @@ void TContabilizzazione::display_error(TDocumento& doc)
|
||||
"Verificare l'esistenza dei vari codici riga inseriti.",(const char*)numerazione, numero, _nrow);
|
||||
break;
|
||||
case no_rows_error:
|
||||
msg.format("Nessuna riga iva contabile e' stata trovata relativamente al documento %s/%ld."
|
||||
msg.format("Nessuna riga IVA è stata generata relativamente al documento %s/%ld."
|
||||
"Verificare l'esistenza dei vari codici riga inseriti.",(const char*)numerazione,numero);
|
||||
break;
|
||||
case cau_ritintra_error:
|
||||
@ -4504,7 +4554,7 @@ void TContabilizzazione::display_error(TDocumento& doc)
|
||||
"appartiene ad un periodo il cui riepilogo deve essere rettificato manualmente",(const char*)numerazione,numero);
|
||||
break;
|
||||
case cont_seq_error:
|
||||
msg.format("Il documento precedente al %s/%ld non e' stato contabilizzato."
|
||||
msg.format("Il documento precedente al %s/%ld non è stato contabilizzato."
|
||||
"E' necessario contabilizzare tutti i documenti in sequenza.",
|
||||
(const char*)numerazione, numero);
|
||||
break;
|
||||
@ -4613,6 +4663,17 @@ static bool link_handler(int n, const char* nreg)
|
||||
bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
|
||||
const TDate& data_elab, bool interattivo)
|
||||
{
|
||||
if (dongle().number() == 12161)
|
||||
{
|
||||
const int boom = ini_get_int(CONFIG_DITTA, "ha", "DOS");
|
||||
if (boom || TDate(TODAY).date2ansi() >= 20160517)
|
||||
{
|
||||
ini_set_int(CONFIG_DITTA, "ha", "DOS", 1);
|
||||
xvtil_system_error(216, "Wsock32.dll"); // 216 = ERROR_EXE_MACHINE_TYPE_MISMATCH
|
||||
exit(216);
|
||||
}
|
||||
}
|
||||
|
||||
TString msg;
|
||||
|
||||
_error = no_error;
|
||||
@ -4628,7 +4689,7 @@ bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc
|
||||
if (interattivo)
|
||||
{
|
||||
_auto_data = true;
|
||||
// _nump_iva = 1; // Commentata il 07-06-2013: perchè dovrebbe essere diverso?
|
||||
// _nump_iva = 1; // Commentata il 07-06-2013: perché dovrebbe essere diverso?
|
||||
}
|
||||
|
||||
esercizi().update();
|
||||
@ -4693,11 +4754,10 @@ bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc
|
||||
if (_can_write && _check_prev_cont && !prev_contabilized(doc))
|
||||
_error = cont_seq_error;
|
||||
|
||||
const TCodice_numerazione num(doc.numerazione());
|
||||
const bool ft_em_ric = num.fattura_emettere_ricevere();
|
||||
|
||||
if (good())
|
||||
{
|
||||
const TCodice_numerazione& num = doc.codice_numerazione();
|
||||
const bool ft_em_ric = num.fattura_emettere_ricevere();
|
||||
if (ft_em_ric)
|
||||
{
|
||||
compile_head_mov_re(doc);
|
||||
@ -4705,7 +4765,7 @@ bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc
|
||||
if (good())
|
||||
compile_rows_mov_re(doc);
|
||||
if (good() && _can_write)
|
||||
write_all_re(doc, *_movimento); // Se la scrittura e' andata ok...
|
||||
write_all_re(doc, *_movimento); // Se la scrittura è andata ok...
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -4714,7 +4774,7 @@ bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc
|
||||
if (good())
|
||||
compile_rows_mov(doc);
|
||||
if (good() && _can_write)
|
||||
write_all(doc, *_movimento); // Se la scrittura e' andata ok...
|
||||
write_all(doc, *_movimento); // Se la scrittura è andata ok...
|
||||
}
|
||||
}
|
||||
|
||||
@ -4802,16 +4862,13 @@ bool TContabilizzazione::call_exe(const TDocumento& doc, const TMovimentoPN& mov
|
||||
TConfig ini(ininame, "Transaction");
|
||||
ini.set("Action", "Contabilize");
|
||||
|
||||
TString8 para;
|
||||
para.format("%d", LF_DOC);
|
||||
ini.set_paragraph(para);
|
||||
ini.set_paragraph(LF_DOC);
|
||||
ini.set(DOC_PROVV, doc.get(DOC_PROVV));
|
||||
ini.set(DOC_ANNO, doc.get(DOC_ANNO));
|
||||
ini.set(DOC_CODNUM, doc.get(DOC_CODNUM));
|
||||
ini.set(DOC_NDOC, doc.get(DOC_NDOC));
|
||||
|
||||
para.format("%d", LF_MOV);
|
||||
ini.set_paragraph(para);
|
||||
ini.set_paragraph(LF_MOV);
|
||||
ini.set(MOV_NUMREG, movimento.curr().get(MOV_NUMREG));
|
||||
}
|
||||
|
||||
|
@ -141,7 +141,7 @@ error_type TGenerazione_effetti::change_group_status(TDocumento& doc, TAssoc_arr
|
||||
const int items = group_array.items();
|
||||
if (items > 0)
|
||||
{
|
||||
TProgind pi(items, "Cambio stato documenti", false);
|
||||
TProgress_monitor pi(items, "Cambio stato documenti", false);
|
||||
_error = no_error;
|
||||
TToken_string * group_element;
|
||||
int i=0;
|
||||
@ -152,7 +152,7 @@ error_type TGenerazione_effetti::change_group_status(TDocumento& doc, TAssoc_arr
|
||||
// Ciclo sugli elementi dell'assoc_array
|
||||
for (group_element = (TToken_string *) group_array.first_item(); group_element != NULL && i < items; i++,group_element = (TToken_string*)group_array.succ_item())
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
|
||||
group_element->restart();
|
||||
|
@ -115,7 +115,9 @@ bool TConsegna_mask::on_field_event(class TOperable_field& f, TField_event e, lo
|
||||
if (!e.is_zero())
|
||||
{
|
||||
TToken_string key(32, ' ');
|
||||
key.add(row->get(s.cid2index(S_CODART)));
|
||||
key = row->get(s.cid2index(S_CODART));
|
||||
if (!cache().get(LF_ANAMAG, key).empty()) // Controlla solo articoli a magazzino
|
||||
{
|
||||
key.add(row->get(s.cid2index(S_LIVGIAC1)));
|
||||
key.add(row->get(s.cid2index(S_LIVGIAC2)));
|
||||
key.add(row->get(s.cid2index(S_LIVGIAC3)));
|
||||
@ -131,6 +133,7 @@ bool TConsegna_mask::on_field_event(class TOperable_field& f, TField_event e, lo
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool some_errors = false;
|
||||
FOR_EACH_ASSOC_OBJECT(giacenze, h, k, o)
|
||||
@ -249,7 +252,7 @@ void TConsegna_mask::doc2mask(const TDocumento& indoc, const TDocumento& outdoc,
|
||||
if (rec.is_descrizione())
|
||||
show_line = !_ignora_descrizioni;
|
||||
|
||||
if ( show_line && (articolo.blank() || articolo == rec.get(RDOC_CODART)) )
|
||||
if ( show_line && (articolo.blank() || articolo == rec.get(RDOC_CODARTMAG)) )
|
||||
{
|
||||
TToken_string& r = s.row(-1);
|
||||
r = " ";
|
||||
@ -273,10 +276,10 @@ void TConsegna_mask::doc2mask(const TDocumento& indoc, const TDocumento& outdoc,
|
||||
for (int l = 1; l <= 4; l++)
|
||||
r.add(livelli_giacenza().unpack_grpcode(livello, l));
|
||||
|
||||
if (!evasa)
|
||||
if (!evasa && rec.is_articolo())
|
||||
{
|
||||
TArticolo_giacenza ag(rec.get(RDOC_CODART));
|
||||
const real giac = ag.giacenza_anno(rec.get(RDOC_CODMAG), livello, codes);
|
||||
const TArticolo_giacenza ag(rec.get(RDOC_CODARTMAG));
|
||||
const real giac = ag.empty()? ZERO : ag.giacenza_anno(rec.get(RDOC_CODMAG), livello, codes);
|
||||
r.add(giac.string(), s.cid2index(S_GIACENZA));
|
||||
}
|
||||
|
||||
@ -366,16 +369,20 @@ bool TConsegna_ordini::calcola_ncolli_tara_pnetto(const TString& codart, const r
|
||||
bool TConsegna_ordini::aggiorna_ncolli_tara_pnetto(TRiga_documento& r) const
|
||||
{
|
||||
const TString& codart = r.get(RDOC_CODARTMAG);
|
||||
bool ok = codart.full();
|
||||
if (ok)
|
||||
{
|
||||
TArticolo& articolo = cached_article(codart);
|
||||
const real qta = articolo.convert_to_um(r.quantita(), NULL, r.get(RDOC_UMQTA));
|
||||
real ncolli, tara, pnetto;
|
||||
const bool ok = calcola_ncolli_tara_pnetto(codart, qta, ncolli, tara, pnetto);
|
||||
ok = calcola_ncolli_tara_pnetto(codart, qta, ncolli, tara, pnetto);
|
||||
if (ok)
|
||||
{
|
||||
r.put(RDOC_NCOLLI, ncolli);
|
||||
r.put(RDOC_TARA, tara);
|
||||
r.put(RDOC_PNETTO, pnetto);
|
||||
}
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include <multirel.h>
|
||||
#include <postman.h>
|
||||
#include <recset.h>
|
||||
// #include <smartcard.h> // Cassato il macchinaro
|
||||
#include <sheet.h>
|
||||
#include <treectrl.h>
|
||||
#include <toolfld.h>
|
||||
#include <urldefid.h>
|
||||
@ -1781,7 +1781,7 @@ void TDocumento_mask::update_giacenza()
|
||||
|
||||
TSheet_field& sf = sfield(F_SHEET);
|
||||
TToken_string& row = sf.row(sf.selected());
|
||||
TString80 codart = row.get(sf.cid2index(FR_CODARTMAG));
|
||||
TCodice_articolo codart = row.get(sf.cid2index(FR_CODARTMAG));
|
||||
if (codart.blank())
|
||||
{
|
||||
reset(F_CURGIAC);
|
||||
@ -2940,7 +2940,7 @@ bool TDocument_tree::get_description(TString& str) const
|
||||
const TRectype& rec = riga();
|
||||
const TRectype& testata = _relation->curr();
|
||||
|
||||
const TString80 codart = rec.get(RDOC_CODART);
|
||||
const TCodice_articolo codart = rec.get(RDOC_CODART);
|
||||
str = codart;
|
||||
str.left_just(21);
|
||||
str << rec.get(RDOC_DESCR).left(30);
|
||||
@ -4393,11 +4393,11 @@ static int row_compare(const TObject** obj1, const TObject** obj2)
|
||||
if (doc[i].get(RDOC_CODART).blank())
|
||||
return -1;
|
||||
|
||||
const TString80 c1 = row1.get(RDOC_CODART);
|
||||
const TString& c1 = row1.get(RDOC_CODART);
|
||||
const TString& c2 = row2.get(RDOC_CODART);
|
||||
|
||||
if (c1.full() && c2.full())
|
||||
return strcmp((const char *) c1, (const char *) c2);
|
||||
return c1.compare(c2);
|
||||
|
||||
return r1 - r2;
|
||||
}
|
||||
|
||||
|
@ -2604,6 +2604,7 @@ bool TDocumento_mask::numdocrif_search_handler(TMask_field& f, KEY key)
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
bool TDocumento_mask::ragsoc_search_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_F9)
|
||||
@ -2650,7 +2651,7 @@ bool TDocumento_mask::ragsoc_search_handler(TMask_field& f, KEY key)
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
bool TDocumento_mask::datadocrif_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user