From 3702e7711bec359838a007e50d6121c947870c47 Mon Sep 17 00:00:00 2001
From: luca <luca@c028cbd2-c16b-5b4b-a496-9718f37d4682>
Date: Thu, 22 Apr 2010 15:36:37 +0000
Subject: [PATCH] Patch level         : Files correlati     : Ricompilazione
 Demo : [ ] Commento            :

git-svn-id: svn://10.65.10.50/trunk@20371 c028cbd2-c16b-5b4b-a496-9718f37d4682
---
 ps/ps1001300.cpp  | 85 +++++++++++++++++++++++++++++++++++++++++++----
 ps/ps1001300a.uml |  1 +
 2 files changed, 79 insertions(+), 7 deletions(-)

diff --git a/ps/ps1001300.cpp b/ps/ps1001300.cpp
index 89786ee2a..3d470cc81 100755
--- a/ps/ps1001300.cpp
+++ b/ps/ps1001300.cpp
@@ -1,12 +1,14 @@
 #include <applicat.h>
 #include <automask.h>
 #include <config.h>
+#include <defmask.h>
 #include <progind.h>
 #include <recarray.h>
 #include <textset.h>
 
 #include "../ca/calib01.h"
 #include "../ca/calib02.h"
+#include "../ca/commesse.h"
 #include "../ca/movana.h"
 #include "../ca/rmovana.h"
 
@@ -24,8 +26,9 @@ protected:
   virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 
   int carica_rmovana();
-  bool one_checked() const;               //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)
+  bool one_checked() const;               //(on_field) controlla se nella colonna dei check ce ne � almeno 1 checkato
+  void check_all(const bool checked);     //(on_field) checka-dechecka la colonna dei check
+  void save_commessa();                   //(on_field) salva i cambiamenti di date della commessa esaminata
 
 public:
   TVariazione_budget_mask();
@@ -135,12 +138,38 @@ bool TVariazione_budget_mask::on_field_event(TOperable_field& o, TField_event e,
       sf_righe.force_update();
     }
     break;
+  case DLG_SAVEREC:
+    if (e == fe_button && check_fields())
+    {
+      save_commessa();
+    }
+    break;
   default:
     break;
   }
   return true;
 }
 
+///////////////////////////////////
+//  Metodi della on_field_event
+///////////////////////////////////
+//salva la commessa con le eventuali modifiche effettuate sulle date
+void TVariazione_budget_mask::save_commessa()
+{
+  TLocalisamfile commesse(LF_COMMESSE);
+  commesse.put(COMMESSE_CODCMS, get(F_CODCMS));
+  int err = commesse.read(_isequal, _lock);
+  if (err == NOERR)
+  {
+    commesse.put(COMMESSE_DATAINIZIO, get_date(F_DATAINICMS));
+    commesse.put(COMMESSE_DATAFINE, get_date(F_DATAFINECMS));
+    commesse.put(COMMESSE_PROROGA, get_bool(F_PROROGATA));
+    commesse.put(COMMESSE_DATAPROR, get_date(F_DATAPRORCMS));
+    //solo la rewrite perch� la commessa ovviamente esiste gi�
+    commesse.rewrite();
+  }
+}
+
 
 //controlla sulla colonna delle spunte se almeno una � checkata
 bool TVariazione_budget_mask::one_checked() const
@@ -166,6 +195,49 @@ void TVariazione_budget_mask::check_all(const bool checked)
   sf_righe.force_update();
 }
 
+//ordina per numreg/numrig (long+int)
+static int compare_by_numrig(TSheet_field & s, int r1, int r2)
+{
+  TToken_string& s1 = s.row(r1);
+  TToken_string& s2 = s.row(r2);
+
+  //prima guarda il numreg..
+  long c10 = s1.get_long(11);
+	long c20 = s2.get_long(11);
+	int cmp = c10 - c20;
+  //..poi il numrig
+	if (cmp == 0)
+  {
+    int c11 = s1.get_int(12);
+    int c21 = s2.get_int(12);
+    cmp = c11 - c21;
+  }
+
+  return cmp;
+}
+
+//ordina le righe per sede/fase (string+string)
+static int compare_by_fase(TSheet_field & s, int r1, int r2)
+{
+  TToken_string& s1 = s.row(r1);
+  TToken_string& s2 = s.row(r2);
+
+  TToken_string c1;
+	c1.add(s1.get(1));
+	c1.add(s1.get(2));
+	
+  TToken_string c2;
+	c2.add(s2.get(1));
+	c2.add(s2.get(2));
+	
+  int cmp = c1.compare(c2);
+
+  if (cmp == 0)
+    cmp = compare_by_numrig(s, r1, r2);
+
+  return cmp;
+}
+
 int TVariazione_budget_mask::carica_rmovana()
 {
   TString query;
@@ -249,12 +321,11 @@ int TVariazione_budget_mask::carica_rmovana()
     row.add(rmovana.get(RMOVANA_NUMRIG).as_int(), 12);
     const TString& tipomov = rmovana.get("MOVANA."MOVANA_TIPOMOV).as_string();
     row.add(tipomov, 13);
+  } //for(bool ok.move....
 
-    //disabilita tutti i campi ma non l'intera riga, perch� deve poter cliccare sul numero riga..
-    //..per procedere alle operazioni di pareggio
-    //if (tipomov != "V")
-      //sf_righe.disable_cell(sf_righe.items() - 1, -1);
-  }
+  //prima di riempire lo sheet a video ordina le righe per sede/fase/numreg/numrig 
+  sf_righe.sort(compare_by_fase);
+  //e poi aggiorna il video!
   sf_righe.force_update();
 
   return sf_righe.items();
diff --git a/ps/ps1001300a.uml b/ps/ps1001300a.uml
index 34b5b02cd..470dfee48 100755
--- a/ps/ps1001300a.uml
+++ b/ps/ps1001300a.uml
@@ -108,6 +108,7 @@ END
 DATE F_DATAPRORCMS
 BEGIN
   PROMPT 57 2 "Proroga "
+  CHECKTYPE REQUIRED
 END
 
 GROUPBOX DLG_NULL 78 3