Patch level :10.0
Files correlati : Ricompilazione Demo : [ ] Commento : cambiato formato del ricarico (numerico) prima versione autoriempiente dello sheet multilistino (ma non autocalcolante) git-svn-id: svn://10.65.10.50/trunk@19382 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
f6ee8d5c85
commit
07eb5f8967
152
ve/ve2700.cpp
152
ve/ve2700.cpp
@ -1,11 +1,13 @@
|
||||
#include <applicat.h>
|
||||
#include <automask.h>
|
||||
#include <config.h>
|
||||
#include <progind.h>
|
||||
#include <recarray.h>
|
||||
#include <recset.h>
|
||||
#include <relapp.h>
|
||||
#include <tabutil.h>
|
||||
|
||||
#include "../mg/anamag.h"
|
||||
#include "condv.h"
|
||||
#include "rcondv.h"
|
||||
|
||||
@ -17,13 +19,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class TAggiorna_listini_edit_mask : public TAutomask
|
||||
{
|
||||
TMask* _query_mask; //puntatore alla maschera di query
|
||||
TMask* _query_mask; //puntatore alla maschera di query
|
||||
TString8 _curr_grmerc; //iniziale grmerc-sotgrmerc
|
||||
|
||||
protected:
|
||||
void fill_children_list();
|
||||
void fill_ricarichi_children_list();
|
||||
void save_children_list();
|
||||
void fill_aggiorna_sheet();
|
||||
void fill_children_list(); //riempie lo sheet dei listini figli (costruttore)
|
||||
void fill_ricarichi_children_list(); //aggiunge il ricarico nello sheet dei listini figli (on_field)
|
||||
void save_children_list(); //salva i ricarichi (modificabili) dello sheet dei figli (on_field)
|
||||
|
||||
void set_header_multilistini_sheet(); //compila le intestazioni delle colonne dello sheet multilistino (costruttore)
|
||||
void fill_multilistini_sheet(); //riempie lo sheet multilistino (on_field)
|
||||
void update_sons_prices(); //aggiorna i prezzi dei listini figli (on_field)
|
||||
int find_codart(TSheet_field& sf, const TString& codart, const TString& um); //cerca l'articolo nello sheet (on_field)
|
||||
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
|
||||
public:
|
||||
@ -34,9 +42,8 @@ public:
|
||||
//metodo per riempire lo sheet dei listini figli con i ricarichi oggi tanto di moda
|
||||
void TAggiorna_listini_edit_mask::fill_ricarichi_children_list()
|
||||
{
|
||||
TString8 grmerc;
|
||||
grmerc.format("%-3s%-2s", (const char*)get(F_GRMERC),(const char*)get(F_SOTGRMERC));
|
||||
const TRectype& rec_gmc = cache().get("GMC", grmerc);
|
||||
_curr_grmerc.format("%-3s%-2s", (const char*)get(F_GRMERC),(const char*)get(F_SOTGRMERC));
|
||||
const TRectype& rec_gmc = cache().get("GMC", _curr_grmerc);
|
||||
TToken_string lista_listini(rec_gmc.get("S1"), ';');
|
||||
//se trova qualcosa nella lista listini collegati al grmerc...
|
||||
if (lista_listini.full())
|
||||
@ -158,6 +165,118 @@ void TAggiorna_listini_edit_mask::save_children_list()
|
||||
} //if(grmerc.full())
|
||||
}
|
||||
|
||||
//restituisce la posizione della riga ALTA, quella disabilitata
|
||||
int TAggiorna_listini_edit_mask::find_codart(TSheet_field& sf, const TString& codart, const TString& um)
|
||||
{
|
||||
//cerca la riga tra quelle esistenti
|
||||
for (int i = 1; i < sf.items(); i += 2)
|
||||
{
|
||||
const char* cod = sf.cell(i, 0);
|
||||
if (codart == cod)
|
||||
return i - 1;
|
||||
}
|
||||
//non trova la riga nel padre -> la aggiunge
|
||||
TToken_string& row_alta = sf.row(-1);
|
||||
sf.disable_cell(sf.items()-1, -1);
|
||||
const TString& descr = cache().get(LF_ANAMAG, codart, ANAMAG_DESCR);
|
||||
row_alta.add(descr);
|
||||
row_alta.add(um);
|
||||
|
||||
TToken_string& row_bassa = sf.row(-1);
|
||||
row_bassa.add(codart);
|
||||
|
||||
return sf.items() - 2; //ritorna la penultima riga (riga alta)
|
||||
}
|
||||
|
||||
|
||||
//riempie lo sheet dei multilistini
|
||||
void TAggiorna_listini_edit_mask::fill_multilistini_sheet()
|
||||
{
|
||||
//popola il double-deck sheet
|
||||
//cerca tutte le righe che appartengono a pedre e figli; se una riga appartiene ad un figlio e non al padre..
|
||||
//..viene aggiunta al padre medesimo (i padri devono sapere tutto dei figli, sennò che genitori sono?)
|
||||
//se invece la riga appartiene al padre e non a uno o più figli questi ultimi saranno lasciati nella..
|
||||
//..loro ignoranza di tale riga (un padre qualche vantaggio dovrà pur averlo, no?)
|
||||
TString query;
|
||||
query << "USE RCONDV\n";
|
||||
query << "SELECT (TIPORIGA=\"A\")&&((CATVEN=#FATHCATVEN)&&(COD=#FATHCOD))";
|
||||
//giro su tutti i figli nello sheet dei figli
|
||||
TSheet_field& sf_figli = sfield(F_LISTINI_FIGLI);
|
||||
TToken_string keys_figli(140, ';');
|
||||
FOR_EACH_SHEET_ROW(sf_figli, r, riga)
|
||||
{
|
||||
TToken_string key;
|
||||
key.add(riga->get(0));
|
||||
key.add(riga->get(1));
|
||||
key.trim();
|
||||
keys_figli.add(key);
|
||||
//prosegue la select
|
||||
query << "||((CATVEN=\"" << key.get(0) << "\")&&(COD=\"" << key.get(1) << "\"))";
|
||||
}
|
||||
query << "\n";
|
||||
|
||||
query << "FROM TIPO=L\n";
|
||||
query << "TO TIPO=L\n";
|
||||
|
||||
TISAM_recordset recset_rows(query);
|
||||
recset_rows.set_var("#FATHCATVEN", get(F_FATHCATVEN));
|
||||
recset_rows.set_var("#FATHCOD", get(F_FATHCODLIS));
|
||||
const long recset_rows_items = recset_rows.items();
|
||||
TProgind pi(recset_rows_items, TR("Creazione righe listini..."), true, true);
|
||||
|
||||
TSheet_field& sf_multilistini = sfield(F_MULTILISTINI);
|
||||
|
||||
//per ogni riga del recordset va ad aggiornare lo sheet sulla maschera (aggiunge la riga)
|
||||
for (bool ok = recset_rows.move_first(); ok; ok = recset_rows.move_next())
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
//dati riga corrente
|
||||
const TString& codart = recset_rows.get(RCONDV_CODRIGA).as_string();
|
||||
const TString& um = recset_rows.get(RCONDV_UM).as_string();
|
||||
const real prezzo = recset_rows.get(RCONDV_PREZZO).as_real();
|
||||
//cerca se esiste o se deve aggiungerla: la find_codart restituisce il numero della riga alta..
|
||||
//..(descrizione/um) del codart in questione (che starà la riga sotto, ovvero riga_alta+1)
|
||||
const int riga_alta = find_codart(sf_multilistini, codart, um);
|
||||
|
||||
TToken_string riga_key;
|
||||
riga_key.add(recset_rows.get(RCONDV_CATVEN).as_string());
|
||||
riga_key.add(recset_rows.get(RCONDV_COD).as_string());
|
||||
riga_key.trim();
|
||||
//mette il prezzo al posto giusto (padre e figlio)
|
||||
const int pos = keys_figli.get_pos(riga_key);
|
||||
if (pos < 0)
|
||||
sf_multilistini.row(riga_alta + 1).add(prezzo.string(), 1);
|
||||
else
|
||||
sf_multilistini.row(riga_alta).add(prezzo.string(), 2 + pos);
|
||||
}
|
||||
|
||||
//aggiorna i prezzi nuovi dei listini figli
|
||||
update_sons_prices();
|
||||
|
||||
}
|
||||
|
||||
//aggiorna i prezzi dei listini figli
|
||||
void TAggiorna_listini_edit_mask::update_sons_prices()
|
||||
{
|
||||
//per ogni articolo, per ogni listino figlio prende il ricarico nello sheet dei figli e lo moltiplica per il prezzo del padre
|
||||
//PrezzoNuovoFiglio = Ricaricofiglio * PrezzoPadre (questo vale per ogni articolo)
|
||||
TSheet_field& sf_figli = sfield(F_LISTINI_FIGLI);
|
||||
TSheet_field& sf_listini = sfield(F_MULTILISTINI);
|
||||
|
||||
FOR_EACH_SHEET_ROW(sf_figli, r, riga_figlio)
|
||||
{
|
||||
const real ricarico = riga_figlio->get(2);
|
||||
FOR_EACH_SHEET_ROW(sf_listini, i, riga) if (i & 1) //è come dire mod(i,2)=1 (ignoranti!)
|
||||
{
|
||||
const real fath_prezzo = riga->get(1);
|
||||
const TPrice son_prezzo = fath_prezzo * (CENTO + ricarico) / CENTO;
|
||||
riga->add(son_prezzo.get_num().string(), r + 2);
|
||||
}
|
||||
}
|
||||
sf_listini.force_update();
|
||||
}
|
||||
|
||||
|
||||
bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
@ -168,7 +287,13 @@ bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_even
|
||||
//una volta selezionati grmerc/sotgrmerc riempie la colonna ricarico dello sheet
|
||||
if (e == fe_modify)
|
||||
{
|
||||
fill_ricarichi_children_list();
|
||||
TString8 grmerc;
|
||||
grmerc.format("%-3s%-2s", (const char*)get(F_GRMERC),(const char*)get(F_SOTGRMERC));
|
||||
if (grmerc != _curr_grmerc)
|
||||
{
|
||||
fill_ricarichi_children_list();
|
||||
fill_multilistini_sheet();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@ -176,6 +301,7 @@ bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_even
|
||||
case DLG_APPLICA:
|
||||
if (e == fe_button)
|
||||
{
|
||||
update_sons_prices();
|
||||
save_children_list();
|
||||
}
|
||||
break;
|
||||
@ -225,7 +351,7 @@ void TAggiorna_listini_edit_mask::fill_children_list()
|
||||
}
|
||||
|
||||
//metodo per riempire lo sheet con i dati da aggiornare
|
||||
void TAggiorna_listini_edit_mask::fill_aggiorna_sheet()
|
||||
void TAggiorna_listini_edit_mask::set_header_multilistini_sheet()
|
||||
{
|
||||
//rinomina le colonne dello sheet di aggiornamento come il listino che rappresentano (fighissimo!)..
|
||||
//..secondo la solita catven+codlis; fa sparire le colonne che non servono. Ricordiamo infatti che..
|
||||
@ -248,8 +374,6 @@ void TAggiorna_listini_edit_mask::fill_aggiorna_sheet()
|
||||
//cancella i figli in eccesso
|
||||
for( ;sf_multilistini.exist_column(num_of_columns); num_of_columns++)
|
||||
sf_multilistini.delete_column(num_of_columns);
|
||||
|
||||
//popola il double-deck sheet
|
||||
}
|
||||
|
||||
|
||||
@ -264,8 +388,8 @@ TAggiorna_listini_edit_mask::TAggiorna_listini_edit_mask(TMask* query_mask)
|
||||
|
||||
//popola lo sheet dei listini figli
|
||||
fill_children_list();
|
||||
//e poi riempie lo sheet di aggiornamento dei figli
|
||||
fill_aggiorna_sheet();
|
||||
//e poi setta le intestazioni dello sheet multilistini
|
||||
set_header_multilistini_sheet();
|
||||
}
|
||||
|
||||
|
||||
|
@ -23,7 +23,7 @@ END
|
||||
BUTTON DLG_APPLICA 2 2
|
||||
BEGIN
|
||||
PROMPT 4 1 "~Applica"
|
||||
PICTURE TOOL_CONVERT
|
||||
PICTURE TOOL_ELABORA
|
||||
END
|
||||
|
||||
BUTTON DLG_ADDART 2 2
|
||||
@ -124,7 +124,7 @@ BEGIN
|
||||
PROMPT 0 3 "Listini figli"
|
||||
ITEM "Cat.Ven."
|
||||
ITEM "Codice"
|
||||
ITEM "Ricarico@8"
|
||||
ITEM "Ricarico"
|
||||
ITEM "Descrizione@50"
|
||||
END
|
||||
|
||||
@ -132,7 +132,7 @@ SPREADSHEET F_MULTILISTINI -1 -1
|
||||
BEGIN
|
||||
PROMPT 0 8 "Aggiornamento figli"
|
||||
ITEM "Descrizione\nArticolo@30"
|
||||
ITEM "U. M. \nPrezzo base@8"
|
||||
ITEM "U. M. \nPrezzo base@8R"
|
||||
ITEM "Figlio 1@8"
|
||||
ITEM "Figlio 2@8"
|
||||
ITEM "Figlio 3@8"
|
||||
@ -190,7 +190,7 @@ BEGIN
|
||||
FLAGS "U"
|
||||
END
|
||||
|
||||
STRING F_RICARICO 5
|
||||
NUMBER F_RICARICO 4
|
||||
BEGIN
|
||||
PROMPT 1 3 "Ricarico "
|
||||
END
|
||||
@ -232,11 +232,13 @@ PAGE "Riga aggiornamento listini" -1 -1 78 22
|
||||
STRING F_CODRIGA 50 20
|
||||
BEGIN
|
||||
PROMPT 1 1 "Codice "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_PREZZO 8
|
||||
BEGIN
|
||||
PROMPT 1 2 "Prezzo "
|
||||
FLAGS "R"
|
||||
END
|
||||
|
||||
CURRENCY F_LIST1 8
|
||||
|
@ -45,7 +45,6 @@ BEGIN
|
||||
OUTPUT F_DESSGR S0
|
||||
MESSAGE SHOW,F_DESGRU|HIDE,H_DESGRU|SHOW,F_DESSGR
|
||||
MESSAGE EMPTY HIDE,F_DESGRU|SHOW,H_DESGRU|HIDE,F_DESSGR
|
||||
//VALIDATE AUTOEXIT_FUNC 2 F_CODGRU F_CODSGR
|
||||
STR_EXPR (#H_CODGRU?="*")||(#F_CODSGR=="")
|
||||
GROUP GR_SEARCH
|
||||
WARNING "Gruppo merceologico non corretto"
|
||||
@ -335,7 +334,7 @@ BEGIN
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING S_RICARICO 5
|
||||
NUMBER S_RICARICO 4
|
||||
BEGIN
|
||||
PROMPT 1 3 "Ricarico "
|
||||
CHECKTYPE REQUIRED
|
||||
|
Loading…
x
Reference in New Issue
Block a user