diff --git a/projects/Bainst.vcproj b/projects/Bainst.vcproj
index 63672f844..d6b643fe4 100755
--- a/projects/Bainst.vcproj
+++ b/projects/Bainst.vcproj
@@ -455,6 +455,10 @@
RelativePath="..\ba\bainst23.cpp"
>
+
+
@@ -624,6 +628,10 @@
RelativePath="..\ba\bainst23.uml"
>
+
+
diff --git a/projects/Sc2.vcproj b/projects/Sc2.vcproj
index 4d2d91a1b..16b9e7609 100755
--- a/projects/Sc2.vcproj
+++ b/projects/Sc2.vcproj
@@ -31,44 +31,59 @@
Name="VCPreBuildEventTool"
/>
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
-
-
-
-
@@ -163,44 +178,59 @@
Name="VCPreBuildEventTool"
/>
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
-
-
-
-
@@ -288,6 +318,14 @@
Name="Sources"
Filter="cpp"
>
+
+
+
+
@@ -648,110 +686,26 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projects/ps.sln b/projects/ps.sln
index 2ea0031bf..27d32d19e 100755
--- a/projects/ps.sln
+++ b/projects/ps.sln
@@ -81,6 +81,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pg0068", "pg0068.vcproj", "
{A1CE9743-A597-4F92-B55A-345A366C9E55} = {A1CE9743-A597-4F92-B55A-345A366C9E55}
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pd6292", "pd6292.vcproj", "{BC839F6C-7042-4A5F-B04E-62380CE25912}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -199,6 +201,10 @@ Global
{DE9692C8-AD5E-4AD1-A0BB-16B9A4F722F1}.Debug|Win32.Build.0 = Debug|Win32
{DE9692C8-AD5E-4AD1-A0BB-16B9A4F722F1}.Release|Win32.ActiveCfg = Release|Win32
{DE9692C8-AD5E-4AD1-A0BB-16B9A4F722F1}.Release|Win32.Build.0 = Release|Win32
+ {BC839F6C-7042-4A5F-B04E-62380CE25912}.Debug|Win32.ActiveCfg = Debug|Win32
+ {BC839F6C-7042-4A5F-B04E-62380CE25912}.Debug|Win32.Build.0 = Debug|Win32
+ {BC839F6C-7042-4A5F-B04E-62380CE25912}.Release|Win32.ActiveCfg = Release|Win32
+ {BC839F6C-7042-4A5F-B04E-62380CE25912}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/projects/tc0.vcproj b/projects/tc0.vcproj
index 6b966b95c..0b4cc75e1 100755
--- a/projects/tc0.vcproj
+++ b/projects/tc0.vcproj
@@ -536,15 +536,7 @@
>
-
-
-
-
diff --git a/projects/ve0.vcproj b/projects/ve0.vcproj
index 0a73c1886..5e799cb36 100755
--- a/projects/ve0.vcproj
+++ b/projects/ve0.vcproj
@@ -931,6 +931,10 @@
Name="Trr"
Filter="trr"
>
+
+
@@ -976,6 +980,10 @@
Name="Dir"
Filter="dir"
>
+
+
diff --git a/projects/ve2.vcproj b/projects/ve2.vcproj
index 63f6ca000..ae0331c75 100755
--- a/projects/ve2.vcproj
+++ b/projects/ve2.vcproj
@@ -577,6 +577,10 @@
RelativePath="..\ve\ve2600.cpp"
>
+
+
@@ -652,10 +656,22 @@
RelativePath="..\ve\ve2500a.uml"
>
+
+
+
+
+
+
-
-
+
+
+
+
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, codart_pos);
- if (_ges_um)
- row_alta.add(codum, codum_pos);
+//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); se non trova la coppia articolo+um ..
+//..aggiunge la coppia di righe
+int TAggiorna_listini_edit_mask::find_or_add_codart(TSheet_field& sf, const TString& codart, const TString& codum)
+{
+ //cerca la riga nello sheet
+ int riga = find_codart(sf, codart, codum);
- TToken_string& row_bassa = sf.row(-1);
- row_bassa.add("X");
- row_bassa.add(codart, codart_pos);
+ if (riga < 0)
+ {
+ const int codart_pos = sf.cid2index(F_CODRIGA);
+ const int codum_pos = codart_pos + 1;
- return sf.items() - 2; //ritorna la penultima riga (riga alta)
+ //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, codart_pos);
+ if (_ges_um)
+ row_alta.add(codum, codum_pos);
+
+ TToken_string& row_bassa = sf.row(-1);
+ row_bassa.add("X");
+ row_bassa.add(codart, codart_pos);
+
+ riga = sf.items() - 2; //ritorna la penultima riga (riga alta)
+ }
+ return riga;
}
-//riempie lo sheet dei multilistini
-void TAggiorna_listini_edit_mask::fill_multilistini_sheet()
+int TAggiorna_listini_edit_mask::crea_famiglia_listini(TToken_string& keys_listini) const
{
- //popola il double-deck sheet
- //cerca tutte le righe che appartengono a padre 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?)
-
- TToken_string keys_listini(140, ';');
+ keys_listini.separator(';');
TToken_string key;
key.add(get(F_FATHCATVEN));
@@ -236,12 +250,28 @@ void TAggiorna_listini_edit_mask::fill_multilistini_sheet()
key.trim();
keys_listini.add(key);
}
+ return keys_listini.items();
+}
+
+
+//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 padre 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?)
+
+ TToken_string keys_listini(140, ';');
+ const int componenti_famiglia = crea_famiglia_listini(keys_listini);
TProgind pi(keys_listini.items(), TR("Creazione righe listini..."), true, true);
TSheet_field& sf_multilistini = sfield(F_MULTILISTINI);
sf_multilistini.destroy();
const int prezzo_pos = sf_multilistini.cid2index(F_PREZZO);
+ TToken_string key;
FOR_EACH_TOKEN(keys_listini, tok)
{
@@ -319,7 +349,7 @@ void TAggiorna_listini_edit_mask::update_sons_prices()
}
//controlla sulla colonna delle spunte se almeno una è checkata
-bool TAggiorna_listini_edit_mask::one_checked()
+bool TAggiorna_listini_edit_mask::one_checked() const
{
TSheet_field& sf_listini = sfield(F_MULTILISTINI);
@@ -410,6 +440,91 @@ void TAggiorna_listini_edit_mask::add_art()
}
}
+//salva i listini così come li trova sulle righe dello sheet multilistini
+void TAggiorna_listini_edit_mask::save_listini()
+{
+ TSheet_field& sf_listini = sfield(F_MULTILISTINI);
+ const int prezzo_pos = sf_listini.cid2index(F_PREZZO);
+
+ TToken_string keys_listini;
+ const int num_listini_da_agg = crea_famiglia_listini(keys_listini);
+ TProgind pi(num_listini_da_agg, TR("Registrazione listini..."), true, true);
+
+ TToken_string key;
+
+ //giro su tutti i listini che compaiono nello sheet; padre e figli
+ //prende le righe di un listino alla volta
+ FOR_EACH_TOKEN(keys_listini, tok)
+ {
+ if (!pi.addstatus(1))
+ break;
+
+ key = tok; //assegnamento necessario causa tipo (se usasse tok direttamente non funzionerebbe)
+ const int pos = keys_listini.get_pos(key);
+
+ TString query;
+ query << "USE RCONDV\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));
+ recset_rows.set_var("#GRMERC", grmerc);
+ const TString4 catven = key.get(0);
+ recset_rows.set_var("#CATVEN", catven);
+ const TString4 cod = key.get(1);
+ recset_rows.set_var("#COD", cod);
+ const long recset_rows_items = recset_rows.items();
+
+ for (bool ok = recset_rows.move_first(); ok; ok = recset_rows.move_next())
+ {
+ TLocalisamfile& file = recset_rows.cursor()->file();
+
+ //prende codart e um dal record su file rcondv
+ const TString& codart = recset_rows.get(RCONDV_CODRIGA).as_string();
+ const TString& um = recset_rows.get(RCONDV_UM).as_string();
+ //cerca sullo sheet la coppia codart+um
+ const int riga_alta = find_codart(sf_listini, codart, um);
+ const real prezzo = sf_listini.row(riga_alta + 1).get(prezzo_pos + pos);
+ //se non la trova o se il prezzo è 0 elimina la riga dal file
+ if (riga_alta < 0 || prezzo == ZERO)
+ {
+ file.remove();
+ continue;
+ }
+
+ //alla fine della storia registra tutto lo sheet sul file
+ FOR_EACH_SHEET_ROW(sf_listini, r, riga)
+ {
+ //file.zero(); //achtung! se l'articolo è nuovo ci può stare, ma se c'era già no
+ file.put(RCONDV_TIPO, "L");
+ file.put(RCONDV_CATVEN, catven);
+ file.put(RCONDV_COD, cod);
+
+ file.put(RCONDV_TIPORIGA, "A");
+ file.put(RCONDV_CODRIGA, codart);
+ file.put(RCONDV_UM, um);
+ file.put(RCONDV_PREZZO, prezzo);
+
+ }
+
+ file.setkey(1);
+ const int nuovo_articolo = file.read();
+
+ //alla fine della fiera deve salvare su file veramente!
+ //se è in inserimento deve fare un write, se in modifica la rewrite
+ if (nuovo_articolo > 0)
+ file.rewrite_write();
+ else
+ file.write_rewrite();
+ }
+ }
+}
+
+
bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch(o.dlg())
@@ -444,6 +559,26 @@ bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_even
}
break;
+ case F_PREZZO:
+ if (e == fe_modify && real::is_null(o.get()))
+ {
+ TSheet_field& sf_listini = sfield(F_MULTILISTINI);
+ TMask& rowmask = sf_listini.sheet_mask();
+ rowmask.field(DLG_USER).on_hit();
+ }
+ break;
+ case DLG_USER:
+ if (e == fe_button)
+ {
+ if (yesno_box(TR("Si conferma l'eliminazione di questo articolo da tutti i listini collegati?")))
+ {
+ TSheet_field& sf_listini = sfield(F_MULTILISTINI);
+ const int selected_riga = sf_listini.selected();
+ TMask& rowmask = sf_listini.sheet_row_mask(selected_riga);
+ rowmask.reset(-1);
+ }
+ }
+ break;
//applica i cambiamenti dovuti ai ricarichi e salva questi ultimi in gmc
case DLG_APPLICA:
if (e == fe_button)
@@ -466,6 +601,12 @@ bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_even
add_art();
}
break;
+ case DLG_SAVEREC:
+ if (e == fe_button)
+ {
+ save_listini();
+ }
+ break;
default:
break;
}
@@ -524,10 +665,13 @@ void TAggiorna_listini_edit_mask::set_header_multilistini_sheet()
//..secondo la solita catven+codlis; fa sparire le colonne che non servono. Ricordiamo infatti che..
//...si posson avere al massimo 10 figli (controllo demografico sui listini)
TSheet_field& sf_multilistini = sfield(F_MULTILISTINI);
+ TMask& row_mask = sf_multilistini.sheet_row_mask(0);
TSheet_field& sf_figli = sfield(F_LISTINI_FIGLI);
TString column_header;
int num_of_columns = 3;
+ //giro su tutte le righe dello sheet dei figli per avere intestazioni da mettere nei campi..
+ //..dello sheet multilistinico
FOR_EACH_SHEET_ROW(sf_figli, r, riga)
{
column_header.cut(0);
@@ -535,12 +679,21 @@ void TAggiorna_listini_edit_mask::set_header_multilistini_sheet()
column_header.trim();
column_header << riga->get(1);
+ //rinomina intestazione colonna dello sheet multilistinico
sf_multilistini.set_column_header(num_of_columns, column_header);
+ //sistema di conseguenza la maschera di riga
+ row_mask.efield(num_of_columns + 101).set_prompt(column_header);
+
num_of_columns ++;
}
//cancella i figli in eccesso
for( ;sf_multilistini.exist_column(num_of_columns); num_of_columns++)
+ {
+ //colonne sheet
sf_multilistini.delete_column(num_of_columns);
+ //sistema di conseguenza la maschera di riga
+ row_mask.efield(num_of_columns + 101).hide();
+ }
}
@@ -702,6 +855,6 @@ bool TAggiorna_listini::create()
int ve2700(int argc, char* argv[])
{
TAggiorna_listini a;
- a.run(argc, argv, TR("Aggiornamneto listini multiplo"));
+ a.run(argc, argv, TR("Sincronizzazione listini"));
return 0;
}
\ No newline at end of file
diff --git a/ve/ve2700b.uml b/ve/ve2700b.uml
index 03348130a..e7a70b969 100755
--- a/ve/ve2700b.uml
+++ b/ve/ve2700b.uml
@@ -8,7 +8,7 @@ BEGIN
PICTURE TOOL_SAVEREC
END
-BUTTON DLG_NULL 2 2
+BUTTON DLG_NULL 4 2
BEGIN
PROMPT 2 1 ""
PICTURE 0
@@ -32,29 +32,29 @@ BEGIN
PICTURE TOOL_IMPORT
END
-BUTTON DLG_NULL 2 2
+BUTTON DLG_NULL 4 2
BEGIN
- PROMPT -1 1 ""
+ PROMPT 6 1 ""
PICTURE 0
END
BUTTON DLG_INFO 2 2
BEGIN
- PROMPT 1 1 "Info"
+ PROMPT 7 1 "Info"
MESSAGE EXIT,K_F2
PICTURE TOOL_INFO
END
BUTTON DLG_HELP 2 2
BEGIN
- PROMPT 2 1 "Help"
+ PROMPT 8 1 "Help"
MESSAGE EXIT,K_F1
PICTURE TOOL_HELP
END
BUTTON DLG_CANCEL 2 2
BEGIN
- PROMPT 3 1 "Annulla"
+ PROMPT 9 1 "Annulla"
MESSAGE EXIT,K_ESC
PICTURE TOOL_CANCEL
END
@@ -238,30 +238,12 @@ ENDMASK
///////////////////////////////////////////////
//maschera di riga sheet aggiornamento listini
-TOOLBAR "topbar" 0 0 0 2
-
-BUTTON DLG_OK 10 2
-BEGIN
- PROMPT -13 -1 ""
-END
-
-BUTTON DLG_DELREC 10 2
-BEGIN
- PROMPT -23 -1 ""
-END
-
-BUTTON DLG_CANCEL 10 2
-BEGIN
- PROMPT -33 -1 ""
-END
-
-ENDPAGE
-
-PAGE "Riga aggiornamento listini" -1 -1 78 22
+PAGE "Riga aggiornamento listini" -1 -1 40 10
BOOLEAN F_CHECK
BEGIN
- PROMPT 1 0 "Includere "
+ PROMPT 1 0 "Applica ricarico "
+ GROUP 1
END
STRING F_CODRIGA 50 20
@@ -274,66 +256,97 @@ STRING F_PREZZO 8
BEGIN
PROMPT 1 2 "Prezzo "
FLAGS "R"
+ GROUP 1
END
CURRENCY F_LIST1 8
BEGIN
- PROMPT 1 4 "List1 "
+ PROMPT 1 4 "List1 "
FLAGS "U"
+ GROUP 1
END
CURRENCY F_LIST2 8
BEGIN
- PROMPT 1 5 "List2 "
+ PROMPT 1 5 "List2 "
FLAGS "U"
+ GROUP 1
END
CURRENCY F_LIST3 8
BEGIN
- PROMPT 1 6 "List3 "
+ PROMPT 1 6 "List3 "
FLAGS "U"
+ GROUP 1
END
CURRENCY F_LIST4 8
BEGIN
- PROMPT 1 7 "List4 "
+ PROMPT 1 7 "List4 "
FLAGS "U"
+ GROUP 1
END
CURRENCY F_LIST5 8
BEGIN
- PROMPT 1 8 "List5 "
+ PROMPT 1 8 "List5 "
FLAGS "U"
+ GROUP 1
END
CURRENCY F_LIST6 8
BEGIN
- PROMPT 1 9 "List6 "
+ PROMPT 21 4 "List6 "
FLAGS "U"
+ GROUP 1
END
CURRENCY F_LIST7 8
BEGIN
- PROMPT 1 10 "List7 "
+ PROMPT 21 5 "List7 "
FLAGS "U"
+ GROUP 1
END
CURRENCY F_LIST8 8
BEGIN
- PROMPT 1 11 "List8 "
+ PROMPT 21 6 "List8 "
FLAGS "U"
+ GROUP 1
END
CURRENCY F_LIST9 8
BEGIN
- PROMPT 1 12 "List9 "
+ PROMPT 21 7 "List9 "
FLAGS "U"
+ GROUP 1
END
CURRENCY F_LIST10 8
BEGIN
- PROMPT 1 13 "List10 "
+ PROMPT 21 8 "List10 "
FLAGS "U"
+ GROUP 1
+END
+
+ENDPAGE
+
+TOOLBAR "topbar" 0 0 0 2
+
+BUTTON DLG_OK 2 2
+BEGIN
+ PROMPT 1 1 ""
+END
+
+BUTTON DLG_USER 2 2
+BEGIN
+ PROMPT 2 1 "A~zzera"
+ PICTURE TOOL_CELLULAR
+END
+
+BUTTON DLG_CANCEL 2 2
+BEGIN
+ PROMPT 3 1 ""
END
ENDPAGE