Patch level : ha1102
Files correlati : ha0.exe ha0300a.msk Ricompilazione Demo : [ ] Commento : Corretta generazione NAC per cliente di fatturazione Corretto caricamento file upload.dGG_MM_AAAA_hh_mm_ss git-svn-id: svn://10.65.10.50/branches/R_10_00@22449 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
b788b164bd
commit
6fc556a1e2
@ -49,7 +49,9 @@ bool TDocumenti_premio_msk::on_key(KEY key)
|
||||
char TDocumenti_premio_msk::find_prezzo_articolo(const TString& codart, real& prezzo, TString& um) const
|
||||
{
|
||||
//1) contratto (listino cliente)
|
||||
const long codcf = get_long(F_CODCF);
|
||||
long codcf = get_long(F_CODCFATT);
|
||||
if (codcf <= 0)
|
||||
codcf = get_long(F_CODCF);
|
||||
const TString& codcontr = get(F_CODCONTR);
|
||||
|
||||
TToken_string key_umart;
|
||||
@ -156,7 +158,7 @@ bool TDocumenti_premio_msk::on_field_event(TOperable_field& o, TField_event e, l
|
||||
}
|
||||
break;
|
||||
case S_CODART:
|
||||
if (e == fe_init || e == fe_modify)
|
||||
if ((e == fe_init || e == fe_close) && !o.empty())
|
||||
{
|
||||
//caricamento del prezzo in fase modifica codart: sequenza contratto->listino->umart
|
||||
//non è possibile mettere un prezzo a mano alla cazzo!
|
||||
|
@ -22,11 +22,11 @@ RADIOBUTTON F_TIPOCONTR 1 70
|
||||
BEGIN
|
||||
PROMPT 16 0 ""
|
||||
ITEM "A|Anticipo"
|
||||
MESSAGE CLEAR,F_DATAFCOMP|ENABLE,1@|CLEAR,F_CODLIS|REQUIRED,F_CODCONTR
|
||||
MESSAGE CLEAR,F_DATAFCOMP|ENABLE,1@|CLEAR,F_CODLIS
|
||||
ITEM "P|Posticipo"
|
||||
MESSAGE ENABLE,F_DATAFCOMP|CLEAR,1@|ENABLE,F_CODLIS|NORMAL,F_CODCONTR
|
||||
MESSAGE ENABLE,F_DATAFCOMP|CLEAR,1@|ENABLE,F_CODLIS
|
||||
ITEM "R|Rifatturazione"
|
||||
MESSAGE CLEAR,F_DATAFCOMP|ENABLE,1@|CLEAR,F_CODLIS|REQUIRED,F_CODCONTR
|
||||
MESSAGE CLEAR,F_DATAFCOMP|ENABLE,1@|CLEAR,F_CODLIS
|
||||
FLAGS "GZ"
|
||||
KEY 1
|
||||
END
|
||||
@ -112,7 +112,7 @@ BEGIN
|
||||
COPY DISPLAY F_CODCF
|
||||
OUTPUT F_CODCFATT CODCF
|
||||
OUTPUT F_DESCFATT RAGSOC
|
||||
CHECKTYPE NORMAL
|
||||
CHECKTYPE REQUIRED
|
||||
ADD RUN cg0 -1 C
|
||||
END
|
||||
|
||||
@ -126,7 +126,7 @@ BEGIN
|
||||
INPUT RAGSOC F_DESCFATT
|
||||
COPY DISPLAY F_DESCF
|
||||
COPY OUTPUT F_CODCFATT
|
||||
CHECKTYPE NORMAL
|
||||
CHECKTYPE SEARCH
|
||||
ADD RUN cg0 -1 C
|
||||
END
|
||||
|
||||
@ -202,7 +202,7 @@ BEGIN
|
||||
USE CONDV
|
||||
INPUT TIPO "C"
|
||||
INPUT TIPOCF F_TIPOCF SELECT
|
||||
INPUT CODCF F_CODCF SELECT
|
||||
INPUT CODCF F_CODCFATT SELECT
|
||||
INPUT COD F_CODCONTR
|
||||
DISPLAY "Codice" COD
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
@ -415,6 +415,7 @@ BEGIN
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT S_CODART CODART
|
||||
OUTPUT S_DESCR DESCR
|
||||
CHECKTYPE REQUIRED
|
||||
WARNING "Articolo assente"
|
||||
FLAGS "U"
|
||||
FIELD CODART
|
||||
@ -430,6 +431,7 @@ BEGIN
|
||||
DISPLAY "Codice@20" CODART
|
||||
COPY OUTPUT S_CODART
|
||||
FIELD DESCR
|
||||
CHECKTYPE SEARCH
|
||||
END
|
||||
|
||||
STRING S_UMQTA 2
|
||||
|
@ -120,7 +120,7 @@ protected:
|
||||
bool genera_nac(const TMask& mask, TArray& contratti_cliente, TArray& documenti_cliente, TLog_report& log);
|
||||
|
||||
//metodi basso livello
|
||||
int find_contratti_cliente(const long codcf, const TMask& mask, TArray& contratti_cliente);
|
||||
int find_contratti_cliente(const long codcfatt, const TMask& mask, TArray& contratti_cliente);
|
||||
void check_date(const TDate& datafine, TDate& dataini);
|
||||
int find_numerazioni(const TString& tipo_to_elab, TString_array& num_doc);
|
||||
|
||||
@ -223,10 +223,12 @@ long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recs
|
||||
|
||||
//in base al tipo documento che si deve elaborare (settato in configurazione), ci possono essere più numerazioni da considerare!
|
||||
TConfig config(CONFIG_DITTA, "ha");
|
||||
const TString& tipo_to_elab = config.get("TipoFatt");
|
||||
const TString4 tipo_doc_to_elab = config.get("TipoFatt");
|
||||
|
||||
/*
|
||||
//e adesso cerca le numerazioni che contengono il tipo preso dalla configurazione
|
||||
TString_array num_doc;
|
||||
const int numerazioni_valide = find_numerazioni(tipo_to_elab, num_doc);
|
||||
const int numerazioni_valide = find_numerazioni(tipo_doc_to_elab, num_doc);
|
||||
if (numerazioni_valide > 0)
|
||||
{
|
||||
query << "&&(";
|
||||
@ -241,6 +243,10 @@ long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recs
|
||||
|
||||
query << ")";
|
||||
}
|
||||
*/
|
||||
// Inutile testare tutte le numerazioni, basta il tipo documento
|
||||
query << "&&(" << DOC_TIPODOC << "=='" << tipo_doc_to_elab << "')";
|
||||
|
||||
//se c'è l'agente specificato...
|
||||
const TString& agente = mask.get(F_CODAGE);
|
||||
const bool has_007 = agente.full();
|
||||
@ -301,15 +307,15 @@ long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recs
|
||||
}
|
||||
|
||||
//metodo che riempie un array con tutti i contratti del cliente passatogli (in base alla tipologia di contratti da elaborare)
|
||||
int THardy_elab_docs::find_contratti_cliente(const long codcf, const TMask& mask, TArray& contratti_cliente)
|
||||
int THardy_elab_docs::find_contratti_cliente(const long codcfatt, const TMask& mask, TArray& contratti_cliente)
|
||||
{
|
||||
contratti_cliente.destroy();
|
||||
//deve cercare tutti i contratti del cliente e metterli nell'array
|
||||
TString query;
|
||||
query << "USE DOC KEY 4";
|
||||
query << "\nSELECT ((TIPODOC=#A_TIPODOC)||(TIPODOC=#R_TIPODOC)||(TIPODOC=#P_TIPODOC))";
|
||||
query << "\nFROM TIPOCF=C CODCF=#CODCF";
|
||||
query << "\nTO TIPOCF=C CODCF=#CODCF";
|
||||
query << "\nSELECT ((TIPODOC=#A_TIPODOC)||(TIPODOC=#R_TIPODOC)||(TIPODOC=#P_TIPODOC))&&(STR(DOC2=#CODCF))";
|
||||
query << "\nFROM TIPOCF=C";
|
||||
query << "\nTO TIPOCF=C";
|
||||
|
||||
TISAM_recordset recset(query);
|
||||
|
||||
@ -325,7 +331,7 @@ int THardy_elab_docs::find_contratti_cliente(const long codcf, const TMask& mask
|
||||
recset.set_var("#R_TIPODOC", tip_rifa);
|
||||
recset.set_var("#P_TIPODOC", tip_post);
|
||||
|
||||
recset.set_var("#CODCF", codcf);
|
||||
recset.set_var("#CODCF", codcfatt);
|
||||
|
||||
const long n_contratti = recset.items(); //questo serve solo al sagace programmatore
|
||||
|
||||
@ -487,14 +493,13 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
||||
FOR_EACH_ARRAY_ITEM(contratti_cliente, r, riga)
|
||||
{
|
||||
TContratto_premi& contratto = *(TContratto_premi*)riga;
|
||||
const long ndoc = contratto.numero(); //il numdoc del contratto serve nelle segnalazioni
|
||||
const long codcf = contratto.codcf_fatt(); //il codice cliente ci serve nella generazione della NAC..
|
||||
const char tipo_contratto = contratto.tipo_contratto(); //..e pure il tipo di contratto in esame!
|
||||
const long ndoc = contratto.numero(); // il numdoc del contratto serve nelle segnalazioni
|
||||
const long codcf = contratto.codcf(); // il codice cliente ci serve nella generazione della NAC...
|
||||
const char tipo_contratto = contratto.tipo_contratto(); // ...e pure il tipo di contratto in esame!
|
||||
|
||||
//segnaliamo l'elaborazione del contratto sul log
|
||||
TString log_msg;
|
||||
log_msg.format("Contratto:%6ld Cliente:%6ld", ndoc, codcf);
|
||||
//log_msg << "Contratto: " << ndoc << " Cliente: " << codcf;
|
||||
|
||||
// generazione del documento NAC dal contratto
|
||||
// -------------------------------------------
|
||||
@ -785,7 +790,7 @@ void THardy_elab_docs::elabora(const TMask& mask)
|
||||
const long items = genera_recordset(mask, recset);
|
||||
if (items == 0)
|
||||
{
|
||||
log.log(1, "Non esistono documenti di vendita che soddisfino i parametri selezionati! Ritenta sarai più fortunato!");
|
||||
log.log(1, "Non esistono documenti di vendita che soddisfino i parametri selezionati!");
|
||||
}
|
||||
|
||||
//3) elaborazione documenti e contratti, generazione NAC, salvataggi
|
||||
|
@ -1312,7 +1312,32 @@ void TUpload2Campo::elabora_RC(THardy_upload_recordset& recset, TLog_report& log
|
||||
}
|
||||
}
|
||||
|
||||
static int upload_cmp(const TSortable& o1, const TSortable& o2, void* jolly)
|
||||
{
|
||||
const TFilename f1 = (const TString&)o1;
|
||||
const TFixed_string s1 = f1.ext()+1;
|
||||
if (s1.empty())
|
||||
return +1;
|
||||
|
||||
const TFilename f2 = (const TString&)o2;
|
||||
const TFixed_string s2 = f2.ext()+1;
|
||||
if (s2.empty())
|
||||
return -1;
|
||||
|
||||
TToken_string d1(s1, '_');
|
||||
TToken_string d2(s2, '_');
|
||||
|
||||
int cmp = 0;
|
||||
|
||||
const int seq[6] = { 2, 1, 0, 3, 4, 5 }; // upload.dGG_MM_AAAA_hh_mm_ss
|
||||
for (int i = 0; i < 6 && cmp == 0; i++)
|
||||
{
|
||||
const int tok = seq[i];
|
||||
cmp = d1.get_int(tok) - d2.get_int(tok);
|
||||
}
|
||||
|
||||
return cmp;
|
||||
}
|
||||
|
||||
void TUpload2Campo::elabora(const TMask& mask, TLog_report& log)
|
||||
{
|
||||
@ -1333,10 +1358,10 @@ void TUpload2Campo::elabora(const TMask& mask, TLog_report& log)
|
||||
//creazione del filename dei files da importare
|
||||
TFilename src_files = _input_path;
|
||||
//una volta si importavano tutti i files di tipo upload*.d; poi si è passati ad importare solo upload.d e basta!
|
||||
//src_files.add("upload*.d");
|
||||
src_files.add("upload.d");
|
||||
src_files.add("upload.d*");
|
||||
TString_array src_files_list;
|
||||
const int n_files_d = list_files(src_files, src_files_list);
|
||||
src_files_list.TArray::sort(upload_cmp, NULL);
|
||||
|
||||
TProgind pi(n_files_d, TR("Acquisizione files in corso..."), true, true);
|
||||
|
||||
@ -1345,8 +1370,11 @@ void TUpload2Campo::elabora(const TMask& mask, TLog_report& log)
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
//file corrente in fase di elaborazione
|
||||
|
||||
const TFilename curr_fname = src_files_list.row(i);
|
||||
pi.set_text(curr_fname);
|
||||
|
||||
//file corrente in fase di elaborazione
|
||||
|
||||
THardy_upload_recordset recset(curr_fname);
|
||||
const long items = recset.items();
|
||||
|
Loading…
x
Reference in New Issue
Block a user