Patch level :10.0

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
prosegue la sincronizzazione listini


git-svn-id: svn://10.65.10.50/trunk@19404 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2009-10-08 10:05:28 +00:00
parent a2bd847611
commit 198208b90f
4 changed files with 115 additions and 39 deletions

@ -984,6 +984,7 @@ bool TMotore_application::save_and_print(bool savedoc, TPrtype mode)
maindoc.stato(sfs);
const char str_sfs[2] = { sfs, '\0' };
m.set(F_STATO, str_sfs, true);
init_modify_mode(m);
}
}
}

@ -1,6 +1,7 @@
#include <applicat.h>
#include <automask.h>
#include <config.h>
#include <defmask.h>
#include <progind.h>
#include <recarray.h>
#include <recset.h>
@ -22,6 +23,7 @@ class TAggiorna_listini_edit_mask : public TAutomask
{
TMask* _query_mask; //puntatore alla maschera di query
TString8 _curr_grmerc; //iniziale grmerc-sotgrmerc
bool _ges_um;
protected:
//Metodi dello sheet listini figli
@ -33,7 +35,7 @@ protected:
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)
int find_or_add_codart(TSheet_field& sf, const TString& codart, const TString& um); //cerca l'articolo nello sheet (on_field)
bool one_checked(); //controlla se nella colonna dei check ce ne è almeno 1 checkato (on_field)
void check_all(const bool checked); //checka-dechecka la colonna dei check (on_field)
void add_art(); //aggiunge un articolo ai listini (on_field)
@ -176,7 +178,7 @@ void TAggiorna_listini_edit_mask::save_children_list()
//metodi F_MULTILISTINI
//restituisce la posizione della riga ALTA, quella disabilitata
int TAggiorna_listini_edit_mask::find_codart(TSheet_field& sf, const TString& codart, const TString& codum)
int TAggiorna_listini_edit_mask::find_or_add_codart(TSheet_field& sf, const TString& codart, const TString& codum)
{
//cerca la riga tra quelle esistenti
const int codart_pos = sf.cid2index(F_CODRIGA);
@ -187,7 +189,7 @@ int TAggiorna_listini_edit_mask::find_codart(TSheet_field& sf, const TString& co
const char* art = sf.cell(i, codart_pos);
TString4 um = sf.cell(i - 1, codum_pos);
um.trim();
if (codart == art && codum == um)
if (codart == art && (!_ges_um || codum == um))
return i - 1;
}
@ -196,7 +198,8 @@ int TAggiorna_listini_edit_mask::find_codart(TSheet_field& sf, const TString& co
sf.disable_cell(sf.items()-1, -1);
const TString& descr = cache().get(LF_ANAMAG, codart, ANAMAG_DESCR);
row_alta.add(descr, codart_pos);
row_alta.add(codum, codum_pos);
if (_ges_um)
row_alta.add(codum, codum_pos);
TToken_string& row_bassa = sf.row(-1);
row_bassa.add("X");
@ -271,9 +274,9 @@ void TAggiorna_listini_edit_mask::fill_multilistini_sheet()
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..
//cerca se esiste o se deve aggiungerla: la find_cor_add_odart 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);
const int riga_alta = find_or_add_codart(sf_multilistini, codart, um);
//mette il prezzo al posto giusto (padre e figlio)
if (pos <= 0)
@ -350,7 +353,7 @@ void TAggiorna_listini_edit_mask::add_art()
query << "USE ANAMAG\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 NRIGA=1\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));
@ -361,7 +364,7 @@ void TAggiorna_listini_edit_mask::add_art()
const int recset_items = recset.items();
//crea uno sheet volante con gli articoli aggiungibili
TArray_sheet sheet(-1, -1, 78, 20, TR("Articoli aggiungibili"), HR("@1|Codice@20|UM|Descrizione@50"));
TArray_sheet sheet(-1, -1, 78, 20, TR("Articoli aggiungibili"), HR("@1|Codice@20|UM|Prezzo@8R|Descrizione@50"));
TProgind pi(recset_items, TR("Ricerca articoli aggiungibili..."), true, true);
@ -373,21 +376,38 @@ void TAggiorna_listini_edit_mask::add_art()
TToken_string row;
//prechecka solo quelli con il corretto grmerc; gli articoli orfani no!
const TString& grmerc = recset.get(ANAMAG_GRMERC).as_string();
if (grmerc.full())
row.add("X");
else
row.add("");
row.add(grmerc.full() ? "X" : "");
const TString codart = recset.get(ANAMAG_CODART).as_string();
row.add(codart);
const TString& um = recset.get(UMART_UM).as_string();
const TString& um = recset.get("UMART.UM").as_string();
row.add(um);
const real prezzo = recset.get("UMART.PREZZO").as_real();
row.add(prezzo.is_zero() ? "" : prezzo.string());
const TString& descr = recset.get(ANAMAG_DESCR).as_string();
row.add(descr);
sheet.add(row);
}
sheet.rows_array().sort(false);
sheet.run();
//adesso che ha proposto lo sheet con gli articoli aggiungibili, deve aggiungere effettivamente..
//..quelli checkati
if (sheet.run() == K_ENTER)
{
TSheet_field& sf_listini = sfield(F_MULTILISTINI);
const int prezzo_pos = sf_listini.cid2index(F_PREZZO);
TString80 codart;
TString4 um;
FOR_EACH_CHECKED_ROW(sheet, r, riga)
{
codart = riga->get(1);
um = riga->get(2); um.trim();
const int numriga = find_or_add_codart(sf_listini, codart, um);
if (numriga >= 0)
sf_listini.row(numriga + 1).add(riga->get(3), prezzo_pos);
}
sf_listini.force_update();
}
}
bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
@ -395,10 +415,18 @@ bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_even
switch(o.dlg())
{
case F_LISTINI_FIGLI:
if (e == se_query_add || e == se_query_del)
return false; // Rifiuta aggiunte e cancellazioni di figli
break;
case F_MULTILISTINI:
if (e == se_query_add)
switch (e)
{
case se_query_add:
send_key(K_SPACE, DLG_NEWREC); // Ridirige l'aggiunta al bottone della toolbar
return false;
case se_query_del:
return false; // Rifiuta cancellazioni di articoli
default: break;
}
break;
case F_GRMERC:
@ -430,7 +458,7 @@ bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_even
check_all(!one_checked());
}
break;
case DLG_ADDART:
case DLG_NEWREC:
if (e == fe_button)
{
if (field(F_GRMERC).empty())
@ -521,9 +549,17 @@ TAggiorna_listini_edit_mask::TAggiorna_listini_edit_mask(TMask* query_mask)
{
//aggiorna campi listino padre
set(F_FATHCATVEN, _query_mask->get(F_FATHCATVEN));
set(F_FATHDESVEN, _query_mask->get(F_FATHDESVEN));
set(F_FATHCODLIS, _query_mask->get(F_FATHCODLIS));
set(F_FATHDESLIS, _query_mask->get(F_FATHDESLIS));
// Determina se vengono gestiti i listini con unità di misura
TToken_string chiave;
chiave.add("L");
chiave.add(get(F_FATHCATVEN));
chiave.add("");
chiave.add("");
chiave.add(get(F_FATHCODLIS));
const TRectype& rec_padre = cache().get(LF_CONDV, chiave);
_ges_um = rec_padre.get_bool(CONDV_GESTUM);
//popola lo sheet dei listini figli
fill_children_list();
@ -599,17 +635,22 @@ bool TAggiorna_listini_query_mask::on_field_event(TOperable_field& o, TField_eve
if (sheet.run() == K_ENTER)
{
//riempie la maschera di query
TToken_string& row = sheet.row(-1);
TToken_string& row = sheet.row(sheet.selected());
set(F_FATHCATVEN, row.get(0), true);
set(F_FATHCODLIS, row.get(1));
set(F_FATHDESLIS, row.get(2));
//lancia la maschera di edit
TAggiorna_listini_edit_mask edit_mask(this); //gli passa la maschera principale
edit_mask.run();
send_key(K_SPACE, DLG_OK);
}
}
break;
case DLG_OK:
if (e == fe_button && efield(F_FATHCODLIS).check())
{
//lancia la maschera di edit
TAggiorna_listini_edit_mask edit_mask(this); //gli passa la maschera principale
edit_mask.run();
}
return false; // NON deve uscire dal main loop!
default:
break;
}
@ -641,10 +682,9 @@ public:
void TAggiorna_listini::main_loop()
{
TSheet_field::set_line_number_width(0);
TAggiorna_listini_query_mask mask;
while (mask.run() == K_ENTER)
{
}
while (mask.run() == K_ENTER);
}
bool TAggiorna_listini::create()

@ -26,13 +26,38 @@ BEGIN
PICTURE TOOL_ELABORA
END
BUTTON DLG_ADDART 2 2
BUTTON DLG_NEWREC 2 2
BEGIN
PROMPT 5 1 "A~ggiunge"
PROMPT 5 1 "+Articoli"
PICTURE TOOL_IMPORT
END
#include <cancelbar.h>
BUTTON DLG_NULL 2 2
BEGIN
PROMPT -1 1 ""
PICTURE 0
END
BUTTON DLG_INFO 2 2
BEGIN
PROMPT 1 1 "Info"
MESSAGE EXIT,K_F2
PICTURE TOOL_INFO
END
BUTTON DLG_HELP 2 2
BEGIN
PROMPT 2 1 "Help"
MESSAGE EXIT,K_F1
PICTURE TOOL_HELP
END
BUTTON DLG_CANCEL 2 2
BEGIN
PROMPT 3 1 "Annulla"
MESSAGE EXIT,K_ESC
PICTURE TOOL_CANCEL
END
ENDPAGE
@ -50,6 +75,10 @@ END
STRING F_FATHCATVEN 2
BEGIN
PROMPT 0 0 "@bDati listino padre "
USE CVE
INPUT CODTAB F_FATHCATVEN
OUTPUT F_FATHDESVEN S0
CHECKTYPE NORMAL
FLAGS "D"
END
@ -62,6 +91,12 @@ END
STRING F_FATHCODLIS 3
BEGIN
PROMPT 23 0 ""
USE LF_CONDV
INPUT TIPO "L"
INPUT CATVEN F_FATHCATVEN
INPUT COD F_FATHCODLIS
OUTPUT F_FATHDESLIS DESCR
CHECKTYPE REQUIRED
FLAGS "D"
END
@ -119,7 +154,7 @@ BEGIN
PROMPT 1 2 "@bListini figli"
END
SPREADSHEET F_LISTINI_FIGLI 78 4
SPREADSHEET F_LISTINI_FIGLI 78 5
BEGIN
PROMPT 0 3 "Listini figli"
ITEM "Cat.Ven."
@ -128,9 +163,9 @@ BEGIN
ITEM "Descrizione@50"
END
SPREADSHEET F_MULTILISTINI -1 -1
SPREADSHEET F_MULTILISTINI
BEGIN
PROMPT 0 8 "Aggiornamento figli"
PROMPT 0 9 "Aggiornamento figli"
ITEM "@1"
ITEM "Descrizione\nArticolo@30"
ITEM "U. M. \nPrezzo base@8R"

@ -803,14 +803,14 @@ class TPrice_sheet : public TArray_sheet
protected:
virtual bool get_ini_paragraph(const TEdit_field& f, TString& name) const;
virtual long handler(WINDOW win, EVENT* ep);
virtual void handler(WINDOW win, EVENT* ep);
TEdit_field& field() { return _fld; }
public:
TPrice_sheet(TEdit_field& f);
};
long TPrice_sheet::handler(WINDOW win, EVENT* ep)
void TPrice_sheet::handler(WINDOW win, EVENT* ep)
{
if (ep->type == E_MOUSE_DOWN)
{
@ -834,7 +834,7 @@ long TPrice_sheet::handler(WINDOW win, EVENT* ep)
xvt_menu_popup(menu->child, win, p, pa, NULL);
xvt_res_free_menu_tree(menu);
}
return 0L;
return;
}
break;
default:
@ -848,19 +848,19 @@ long TPrice_sheet::handler(WINDOW win, EVENT* ep)
{
case BROWSE_BAR + 1:
save_columns_order(field());
return 0L;
return;
case BROWSE_BAR + 2:
set_columns_order(NULL);
return 0L;
return;
case BROWSE_BAR + 3:
fld(0).on_key(K_F11);
return 0L;
return;
default:
break;
}
}
return TArray_sheet::handler(win, ep);
TArray_sheet::handler(win, ep);
}
bool TPrice_sheet::get_ini_paragraph(const TEdit_field& field, TString& parag) const