Patch level :10.0

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
ancora listini e torelli in corso d'opera


git-svn-id: svn://10.65.10.50/trunk@19470 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2009-10-19 13:43:25 +00:00
parent 0f7d26d364
commit d01fb5405e
6 changed files with 203 additions and 96 deletions

View File

@ -467,6 +467,7 @@ END
STRING F_L_ARROTONDA 8
BEGIN
PROMPT 1 15 "Arrotonda "
FIELD ARROTONDA
END
TEXT -1

View File

@ -168,12 +168,11 @@ BEGIN
GROUP 2
END
STRING F_SOTGRMERC 5
STRING F_SOTGRMERC 2
BEGIN
PROMPT 20 10 ""
FLAGS "U"
USE GMC
//SELECT CODTAB[4,5] != ""
COPY INPUT F_GRMERC
INPUT CODTAB[4,5] F_SOTGRMERC
DISPLAY "Gruppo" CODTAB[1,3]

View File

@ -43,7 +43,10 @@ protected:
void check_all(const bool checked); //checka-dechecka la colonna dei check (on_field)
void add_art(); //aggiunge un articolo ai listini (on_field)
void save_listini(); //salva tutte le righe listini (padre e figli) così come sono sullo sheet (on_field)
real get_price(TSheet_field& sf, const int row, const int col) const;
void set_price(TSheet_field& sf, const int row, const int col, real& price);
void get_correct_grmerc(TString& grmerc, const bool asterisk) const;
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
@ -57,7 +60,7 @@ 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()
{
_curr_grmerc.format("%-3s%-2s", (const char*)get(F_GRMERC),(const char*)get(F_SOTGRMERC));
get_correct_grmerc(_curr_grmerc, false);
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...
@ -104,7 +107,7 @@ void TAggiorna_listini_edit_mask::fill_ricarichi_children_list()
void TAggiorna_listini_edit_mask::save_children_list()
{
TString8 grmerc;
grmerc.format("%-3s%-2s", (const char*)get(F_GRMERC),(const char*)get(F_SOTGRMERC));
get_correct_grmerc(grmerc, false);
if (grmerc.full())
{
//cerca sulla tabella GMC il record corrispondente all'attuale GMC
@ -152,6 +155,21 @@ void TAggiorna_listini_edit_mask::save_children_list()
const TString& ricarico = riga->get(2);
chiave.add(ricarico, 2); //setta il ricarico nella cella dello sheet
ricarichi.add(chiave, i); //lo aggiunge all'array dei ricarichi
//salva il valore dell'arrotondamento sulla testata del listino corrente dello sheet
TLocalisamfile condv(LF_CONDV);
condv.put(CONDV_TIPO, 'L');
condv.put(CONDV_CATVEN, sh_catven);
condv.put(CONDV_TIPOCF, "");
condv.put(CONDV_CODCF, "");
condv.put(CONDV_COD, sh_codlis);
int err = condv.read();
if (err == NOERR)
{
condv.put(CONDV_ARROTONDA, riga->get(3));
condv.rewrite();
}
break; //esce perchè non può fare altro
}
} //FOR_EACH_SHEET_ROW_BACK...
@ -185,7 +203,7 @@ void TAggiorna_listini_edit_mask::save_children_list()
real TAggiorna_listini_edit_mask::get_price(TSheet_field& sf, const int row, const int col) const
{
if (col == sf.cid2index(F_PREZZO))
if (col == sf.cid2index(S2_PREZZO))
{
TString16 str_prezzo = sf.cell(row, col);
str_prezzo.strip(".");
@ -195,12 +213,18 @@ real TAggiorna_listini_edit_mask::get_price(TSheet_field& sf, const int row, con
return real(sf.cell(row, col));
}
void TAggiorna_listini_edit_mask::set_price(TSheet_field& sf, const int row, const int col, real& price)
{
}
//cerca nello sheet la coppia codart+um che gli viene passata restituendo la posizione della riga ALTA..
//della coppia di righe sheet interessate (è la riga disabilitata);
int TAggiorna_listini_edit_mask::find_codart(TSheet_field& sf, const TString& codart, const TString& codum) const
{
//cerca la riga tra quelle esistenti
const int codart_pos = sf.cid2index(F_CODRIGA);
const int codart_pos = sf.cid2index(S2_CODRIGA);
const int codum_pos = codart_pos + 1;
for (int i = 1; i < sf.items(); i += 2)
@ -224,7 +248,7 @@ int TAggiorna_listini_edit_mask::find_or_add_codart(TSheet_field& sf, const TStr
if (riga < 0)
{
const int codart_pos = sf.cid2index(F_CODRIGA);
const int codart_pos = sf.cid2index(S2_CODRIGA);
const int codum_pos = codart_pos + 1;
//non trova la riga nel padre -> la aggiunge
@ -269,6 +293,17 @@ int TAggiorna_listini_edit_mask::crea_famiglia_listini(TToken_string& keys_listi
}
void TAggiorna_listini_edit_mask::get_correct_grmerc(TString& grmerc, const bool asterisk) const
{
grmerc.format("%-3s%-2s", (const char*)get(F_GRMERC),(const char*)get(F_SOTGRMERC));
grmerc.trim();
//se il grmerc non è completo (solo il primo carattere), ci vuole una ricerca tipo..
//..jolly; vale anche per il sottogrmerc (non pieno con i 3 caratteri)
if (asterisk && grmerc.len() < 5)
grmerc << "*";
}
//riempie lo sheet dei multilistini
void TAggiorna_listini_edit_mask::fill_multilistini_sheet()
{
@ -285,7 +320,7 @@ void TAggiorna_listini_edit_mask::fill_multilistini_sheet()
TSheet_field& sf_multilistini = sfield(F_MULTILISTINI);
sf_multilistini.destroy();
const int prezzo_pos = sf_multilistini.cid2index(F_PREZZO);
const int prezzo_pos = sf_multilistini.cid2index(S2_PREZZO);
TToken_string key;
FOR_EACH_TOKEN(keys_listini, tok)
@ -296,14 +331,15 @@ void TAggiorna_listini_edit_mask::fill_multilistini_sheet()
key = tok;
TString query;
query << "USE RCONDV\n";
query << "SELECT ANAMAG.GRMERC=#GRMERC\n";
query << "SELECT ANAMAG.GRMERC?=#GRMERC\n"; //occhio al '?' Serve per poter avere ricerche jolly
query << "JOIN ANAMAG INTO CODART==CODRIGA\n";
query << "FROM TIPO=L CATVEN=#CATVEN COD=#COD TIPORIGA=A\n";
query << "TO TIPO=L CATVEN=#CATVEN COD=#COD TIPORIGA=A\n";
TISAM_recordset recset_rows(query);
TString8 grmerc;
grmerc.format("%-3s%-2s", (const char*)get(F_GRMERC),(const char*)get(F_SOTGRMERC));
get_correct_grmerc(grmerc, true);
recset_rows.set_var("#GRMERC", grmerc);
recset_rows.set_var("#CATVEN", key.get(0));
recset_rows.set_var("#COD", key.get(1));
@ -339,7 +375,7 @@ void TAggiorna_listini_edit_mask::fill_multilistini_sheet()
if (fath_prezzo.is_zero())
{
TSheet_field& listini_figli = sfield(F_LISTINI_FIGLI);
const real ricarico = listini_figli.cell(pos - 1, listini_figli.cid2index(F_RICARICO));
const real ricarico = listini_figli.cell(pos - 1, listini_figli.cid2index(S1_RICARICO));
const TPrice prezzo_base(prezzo * CENTO / (CENTO + ricarico));
sf_multilistini.row(riga_bassa).add(prezzo_base.string(true), prezzo_pos);
}
@ -359,7 +395,7 @@ void TAggiorna_listini_edit_mask::update_sons_prices()
//PrezzoNuovoFiglio = Ricaricofiglio * PrezzoPadre (questo vale per ogni articolo)
TSheet_field& sf_figli = sfield(F_LISTINI_FIGLI);
TSheet_field& sf_listini = sfield(F_MULTILISTINI);
const int fath_prezzo_pos = sf_listini.cid2index(F_PREZZO);
const int fath_prezzo_pos = sf_listini.cid2index(S2_PREZZO);
FOR_EACH_SHEET_ROW(sf_figli, r, riga_figlio)
{
@ -412,13 +448,16 @@ void TAggiorna_listini_edit_mask::add_art()
//..si rimanda al programma principale di gestione listini ve2500!!)
TString query;
query << "USE ANAMAG\n";
query << "SELECT ((GRMERC=#GRMERC)||(GRMERC=\"\"))&&(RCONDV.CODRIGA=\"\")\n";
query << "SELECT ((GRMERC?=#GRMERC)||(GRMERC=\"\"))&&(RCONDV.CODRIGA=\"\")\n";
query << "JOIN RCONDV INTO TIPO=\"L\" CATVEN=#CATVEN COD=#COD TIPORIGA=\"A\" CODRIGA=CODART\n";
query << "JOIN UMART INTO CODART=CODART\n";
TISAM_recordset recset(query);
TString8 grmerc;
grmerc.format("%-3s%-2s", (const char*)get(F_GRMERC),(const char*)get(F_SOTGRMERC));
recset.set_var("#GRMERC", grmerc);
TString8 grmerc, grmerc_filter;
get_correct_grmerc(grmerc, false);
get_correct_grmerc(grmerc_filter, true);
recset.set_var("#GRMERC", grmerc_filter);
recset.set_var("#CATVEN", get(F_FATHCATVEN));
recset.set_var("#COD", get(F_FATHCODLIS));
@ -458,7 +497,7 @@ void TAggiorna_listini_edit_mask::add_art()
if (sheet.run() == K_ENTER)
{
TSheet_field& sf_listini = sfield(F_MULTILISTINI);
const int prezzo_pos = sf_listini.cid2index(F_PREZZO);
const int prezzo_pos = sf_listini.cid2index(S2_PREZZO);
TString80 codart;
TString4 um;
FOR_EACH_CHECKED_ROW(sheet, r, riga)
@ -476,7 +515,7 @@ void TAggiorna_listini_edit_mask::add_art()
FOR_EACH_SHEET_ROW(sf_listini_figli, i, son)
{
sf_listini.row(numriga).add(prezzo.get_num().string(), prezzo_pos + i + 1);
const real ricarico = son->get(sf_listini_figli.cid2index(F_RICARICO));
const real ricarico = son->get(sf_listini_figli.cid2index(S1_RICARICO));
const TPrice son_prezzo = prezzo.get_num() * (CENTO + ricarico) / CENTO;
sf_listini.row(numriga + 1).add(son_prezzo.get_num().string(), prezzo_pos + i + 1);
}
@ -502,7 +541,7 @@ void TAggiorna_listini_edit_mask::add_art()
void TAggiorna_listini_edit_mask::save_listini()
{
TSheet_field& sf_listini = sfield(F_MULTILISTINI);
const int prezzo_pos = sf_listini.cid2index(F_PREZZO);
const int prezzo_pos = sf_listini.cid2index(S2_PREZZO);
TToken_string keys_listini;
const int num_listini_da_agg = crea_famiglia_listini(keys_listini);
@ -522,14 +561,15 @@ void TAggiorna_listini_edit_mask::save_listini()
TString query;
query << "USE RCONDV\n";
query << "SELECT ANAMAG.GRMERC=#GRMERC\n";
query << "SELECT ANAMAG.GRMERC?=#GRMERC\n";
query << "JOIN ANAMAG INTO CODART==CODRIGA\n";
query << "FROM TIPO=L CATVEN=#CATVEN COD=#COD TIPORIGA=A\n";
query << "TO TIPO=L CATVEN=#CATVEN COD=#COD TIPORIGA=A\n";
TISAM_recordset recset_rows(query);
TString8 grmerc;
grmerc.format("%-3s%-2s", (const char*)get(F_GRMERC),(const char*)get(F_SOTGRMERC));
get_correct_grmerc(grmerc, false);
recset_rows.set_var("#GRMERC", grmerc);
const TString4 catven = key.get(0);
recset_rows.set_var("#CATVEN", catven);
@ -556,7 +596,7 @@ void TAggiorna_listini_edit_mask::save_listini()
TRectype key_rec(LF_RCONDV);
//alla fine della storia registra tutto lo sheet sul file
FOR_EACH_SHEET_ROW(sf_listini, r, riga) if (r & 1)
FOR_EACH_SHEET_ROW(sf_listini, r, riga) if ((r & 1) && (riga->get_char(0) > ' ')) //è come dire riga dispari e checked (ignoranti!)
{
const real prezzo = get_price(sf_listini, r, prezzo_pos + pos);
if (prezzo > ZERO)
@ -628,8 +668,8 @@ bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_even
if (e == fe_modify)
{
TString8 grmerc;
grmerc.format("%-3s%-2s", (const char*)get(F_GRMERC),(const char*)get(F_SOTGRMERC));
if (grmerc != _curr_grmerc)
get_correct_grmerc(grmerc, false);
if (grmerc != _curr_grmerc && grmerc.full())
{
if (_ask_save)
{
@ -643,27 +683,56 @@ bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_even
}
break;
case F_PREZZO:
case S2_PREZZO:
if (e == fe_modify)
{
//se il prezzo viene messo a 0 nel listino padre, si prepara ad eliminare l'articolo..
//..come se fosse premuto DLG_USER (vedi DLG_USER qui sotto)
if (real::is_null(o.get()))
{
TMask& rowmask = o.mask();
rowmask.field(DLG_USER).on_hit();
}
else //se invece viene cambiato il prezzo del padre ed i figli hanno tutti i prezzi nulli..
//..(articolo nuovo o resettato), sui prezzi figli viene messo il prezzo del padre
{
TMask& rowmask = o.mask(); //serve la maschera di riga! (sennò funziona solo sullo sheet)
real somma_prezzi_figli = ZERO;
for (int i = S2_LIST1; i <= S2_LIST10; i++)
somma_prezzi_figli += rowmask.get_real(i);
if (somma_prezzi_figli.is_zero())
{
TSheet_field& sf_listini = sfield(F_LISTINI_FIGLI);
const int col_ricarichi = sf_listini.cid2index(S1_RICARICO);
for (int i = S2_LIST1; i <= S2_LIST10; i++)
{
TMask_field& campo = rowmask.efield(i);
//se il campo è visibile, allora il listino figlio è tra quelli attivi e lo aggiorna
if (campo.shown())
{
const real ricarico = sf_listini.cell(i - S2_LIST1, col_ricarichi);
real prezzo_figlio = o.get();
prezzo_figlio = prezzo_figlio * (CENTO + ricarico) / CENTO;
campo.set(prezzo_figlio.string());
}
}
}
}
_ask_save = true;
}
break;
case F_LIST1:
case F_LIST2:
case F_LIST3:
case F_LIST4:
case F_LIST5:
case F_LIST6:
case F_LIST7:
case F_LIST8:
case F_LIST9:
case F_LIST10:
case S2_LIST1:
case S2_LIST2:
case S2_LIST3:
case S2_LIST4:
case S2_LIST5:
case S2_LIST6:
case S2_LIST7:
case S2_LIST8:
case S2_LIST9:
case S2_LIST10:
if (e == fe_modify)
{
_ask_save = true;
@ -726,7 +795,10 @@ void TAggiorna_listini_edit_mask::fill_children_list()
//disabilita se necessario la colonna della categoria di vendita (lo sheet serve comunque dopo!)
TSheet_field& sf_righe = sfield(F_LISTINI_FIGLI);
sf_righe.destroy();
sf_righe.enable_column(F_CATVEN, ini_get_bool(CONFIG_DITTA, "ve", "GESLISCV"));
/*dovrebbe nascondere la colonna catven se non la si usa, ma non funziona la chiamata a XI
const bool show_catven_column = ini_get_bool(CONFIG_DITTA, "ve", "GESLISCV");
if (!show_catven_column)
sf_righe.show_column(S1_CATVEN, false);*/
//aggiorna sheet con i listini figli
TString query;
@ -748,11 +820,14 @@ void TAggiorna_listini_edit_mask::fill_children_list()
const TString& catven = rec.get(CONDV_CATVEN);
const TString& codlis = rec.get(CONDV_COD);
const TString& arrotonda = rec.get(CONDV_ARROTONDA);
const TString& deslis = rec.get(CONDV_DESCR);
row.add(catven);
row.add(codlis);
row.add("");
row.add(arrotonda);
row.add(deslis);
sf_righe.check_row(sf_righe.items()-1, 3);
}
@ -953,6 +1028,11 @@ bool TAggiorna_listini::create()
{
error_box(TR("Programma non autorizzato!"));
return false;
//se non paghi ti stronco!!!
const TDate oggi(TODAY);
if (oggi >= 20091120)
return false;
}
return TSkeleton_application::create();
}

View File

@ -14,25 +14,29 @@
#define DLG_APPLICA 210
#define DLG_ADDART 211
#define F_ARROTONDA 212
#define F_MULTILISTINI 220
//primo sheet con i listini figli
#define F_CATVEN 101
#define F_CODLIS 102
#define F_RICARICO 103
#define F_DESLIS 104
#define S1_CATVEN 101
#define S1_CODLIS 102
#define S1_RICARICO 103
#define S1_ARROTONDA 104
#define S1_DESLIS 105
//multi-terribile sheet dei multi-listini
#define F_CHECK 101
#define F_CODRIGA 102
#define F_PREZZO 103
#define F_LIST1 104
#define F_LIST2 105
#define F_LIST3 106
#define F_LIST4 107
#define F_LIST5 108
#define F_LIST6 109
#define F_LIST7 110
#define F_LIST8 111
#define F_LIST9 112
#define F_LIST10 113
#define S2_CHECK 101
#define S2_CODRIGA 102
#define S2_PREZZO 103
#define S2_LIST1 104
#define S2_LIST2 105
#define S2_LIST3 106
#define S2_LIST4 107
#define S2_LIST5 108
#define S2_LIST6 109
#define S2_LIST7 110
#define S2_LIST8 111
#define S2_LIST9 112
#define S2_LIST10 113

View File

@ -104,6 +104,16 @@ BEGIN
PROMPT 0 12 " con il gr. merc. corrente in anagrafica)"
END
TEXT DLG_NULL
BEGIN
PROMPT 0 13 "6) Per eliminare un articolo da un listino mettere a 0 il prezzo; facendo"
END
TEXT DLG_NULL
BEGIN
PROMPT 0 14 " questo nel listino padre l'articolo viene eliminato da tutti i listini"
END
ENDPAGE
ENDMASK

View File

@ -82,7 +82,7 @@ BEGIN
FLAGS "D"
END
STRING F_FATHDESVEN 10
STRING F_FATHDESVEN 50
BEGIN
PROMPT 1 0 ""
FLAGS "H"
@ -96,6 +96,7 @@ BEGIN
INPUT CATVEN F_FATHCATVEN
INPUT COD F_FATHCODLIS
OUTPUT F_FATHDESLIS DESCR
OUTPUT F_ARROTONDA ARROTONDA
CHECKTYPE REQUIRED
FLAGS "D"
END
@ -120,7 +121,7 @@ BEGIN
GROUP 2
END
STRING F_SOTGRMERC 5
STRING F_SOTGRMERC 2
BEGIN
PROMPT 19 1 ""
FLAGS "U"
@ -149,6 +150,12 @@ BEGIN
GROUP 2
END
STRING F_ARROTONDA 8
BEGIN
PROMPT 27 2 "Arrotondamento "
FLAGS "D"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 2 "@bListini figli"
@ -160,6 +167,7 @@ BEGIN
ITEM "Cat.Ven."
ITEM "Codice"
ITEM "Ricarico"
ITEM "Arrotonda"
ITEM "Descrizione@50"
END
@ -187,7 +195,39 @@ ENDMASK
////////////////////////////////////////////
//maschera di riga sheet dei listini figli
TOOLBAR "topbar" 0 0 0 2
PAGE "Riga listino figlio" -1 -1 72 5
STRING S1_CATVEN 2
BEGIN
PROMPT 1 1 "Cat. ven. "
FLAGS "UD"
END
STRING S1_CODLIS 3
BEGIN
PROMPT 1 2 "Listino "
FLAGS "UD"
END
NUMBER S1_RICARICO 4
BEGIN
PROMPT 1 3 "Ricarico "
END
STRING S1_ARROTONDA 8
BEGIN
PROMPT 1 4 "Arrotonda "
END
STRING S1_DESLIS 50
BEGIN
PROMPT 18 2 ""
FLAGS "D"
END
ENDPAGE
TOOLBAR "" 0 0 0 2
BUTTON DLG_OK 10 2
BEGIN
@ -206,33 +246,6 @@ END
ENDPAGE
PAGE "Riga listino figlio" -1 -1 78 22
STRING F_CATVEN 2
BEGIN
PROMPT 1 1 "Cat. ven. "
FLAGS "UD"
END
STRING F_CODLIS 3
BEGIN
PROMPT 1 2 "Listino "
FLAGS "UD"
END
NUMBER F_RICARICO 4
BEGIN
PROMPT 1 3 "Ricarico "
END
STRING F_DESLIS 50
BEGIN
PROMPT 18 2 ""
FLAGS "D"
END
ENDPAGE
ENDMASK
@ -240,89 +253,89 @@ ENDMASK
//maschera di riga sheet aggiornamento listini
PAGE "Riga aggiornamento listini" -1 -1 40 10
BOOLEAN F_CHECK
BOOLEAN S2_CHECK
BEGIN
PROMPT 1 0 "Applica ricarico "
GROUP 1
END
STRING F_CODRIGA 50 20
STRING S2_CODRIGA 50 20
BEGIN
PROMPT 1 1 "Codice "
FLAGS "D"
END
STRING F_PREZZO 8
STRING S2_PREZZO 8
BEGIN
PROMPT 1 2 "Prezzo "
FLAGS "R"
GROUP 1
END
CURRENCY F_LIST1 8
CURRENCY S2_LIST1 8
BEGIN
PROMPT 1 4 "List1 "
FLAGS "U"
GROUP 1
END
CURRENCY F_LIST2 8
CURRENCY S2_LIST2 8
BEGIN
PROMPT 1 5 "List2 "
FLAGS "U"
GROUP 1
END
CURRENCY F_LIST3 8
CURRENCY S2_LIST3 8
BEGIN
PROMPT 1 6 "List3 "
FLAGS "U"
GROUP 1
END
CURRENCY F_LIST4 8
CURRENCY S2_LIST4 8
BEGIN
PROMPT 1 7 "List4 "
FLAGS "U"
GROUP 1
END
CURRENCY F_LIST5 8
CURRENCY S2_LIST5 8
BEGIN
PROMPT 1 8 "List5 "
FLAGS "U"
GROUP 1
END
CURRENCY F_LIST6 8
CURRENCY S2_LIST6 8
BEGIN
PROMPT 21 4 "List6 "
FLAGS "U"
GROUP 1
END
CURRENCY F_LIST7 8
CURRENCY S2_LIST7 8
BEGIN
PROMPT 21 5 "List7 "
FLAGS "U"
GROUP 1
END
CURRENCY F_LIST8 8
CURRENCY S2_LIST8 8
BEGIN
PROMPT 21 6 "List8 "
FLAGS "U"
GROUP 1
END
CURRENCY F_LIST9 8
CURRENCY S2_LIST9 8
BEGIN
PROMPT 21 7 "List9 "
FLAGS "U"
GROUP 1
END
CURRENCY F_LIST10 8
CURRENCY S2_LIST10 8
BEGIN
PROMPT 21 8 "List10 "
FLAGS "U"