Files correlati : pd0610 pd0610a.msk Ricompilazione Demo : [ ] Commento : Piccole correzioni git-svn-id: svn://10.65.10.50/branches/R_10_00@21549 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			232 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			232 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <applicat.h>
 | ||
| #include <automask.h>
 | ||
| #include <defmask.h>
 | ||
| #include <recset.h>
 | ||
| #include <relation.h>
 | ||
| #include <tabmod.h>
 | ||
| #include <tabutil.h>
 | ||
| 
 | ||
| #include "pd0610100a.h"
 | ||
| 
 | ||
| ///////////////////////////////////////////////////////////
 | ||
| // Tabella clienti/articoli/fornitori
 | ||
| ///////////////////////////////////////////////////////////
 | ||
| 
 | ||
| class TTabmod_caf_msk: public TAutomask
 | ||
| {
 | ||
| protected:
 | ||
|   void riempi_sheet();
 | ||
|   void aggiungi_riga();
 | ||
|   void registra();
 | ||
|   virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | ||
| public:
 | ||
| 	TTabmod_caf_msk();
 | ||
| };
 | ||
| 
 | ||
| void TTabmod_caf_msk::riempi_sheet()
 | ||
| {
 | ||
|   const long cliente = get_long(F_CLIENTE);
 | ||
|   TSheet_field& sheet = sfield(F_SHEET);
 | ||
|   sheet.destroy();
 | ||
|   if (cliente <= 0)
 | ||
| 	{
 | ||
|     sheet.force_update();
 | ||
|     return;
 | ||
| 	}
 | ||
| 	TString8 codcli;
 | ||
| 	codcli.format("%06ld", cliente);
 | ||
|   TString query;
 | ||
| 	query << "USE &CAF\n"
 | ||
|         << "FROM CODTAB=\"" << codcli << "\"\n"
 | ||
|         << "TO CODTAB=\""   << codcli << "\"";
 | ||
|   TISAM_recordset caf_query(query);
 | ||
|   for (bool ok = caf_query.move_first(); ok; ok = caf_query.move_next())
 | ||
|   {
 | ||
|     const TRectype& caf = caf_query.cursor()->curr();
 | ||
|     const TString80 codtab = caf.get("CODTAB");
 | ||
| 		const TString8 forn1 = caf.get("I0");
 | ||
| 		const TString8 forn2 = caf.get("I1");
 | ||
|     TToken_string& row = sheet.row(-1);
 | ||
|     row.add(codtab.left(6), sheet.cid2index(S_CLIENTE));
 | ||
|     row.add(codtab.mid(6), sheet.cid2index(S_ARTICOLO));
 | ||
|     row.add(forn1,					sheet.cid2index(S_FORN1));
 | ||
|     row.add(forn2,					sheet.cid2index(S_FORN2));
 | ||
| 		sheet.disable_cell(sheet.items()-1 , sheet.cid2index(S_ARTICOLO));
 | ||
| 		sheet.disable_cell(sheet.items()-1 , sheet.cid2index(S_DESART));
 | ||
| 		sheet.check_row(sheet.items()-1);
 | ||
| 
 | ||
| 	}
 | ||
| 	sheet.force_update();
 | ||
| }
 | ||
| 
 | ||
| void TTabmod_caf_msk::aggiungi_riga()
 | ||
| {
 | ||
|   const TString8 cliente = get(F_CLIENTE);
 | ||
|   if (cliente.empty())
 | ||
|     return;
 | ||
| 
 | ||
|   TSheet_field& sheet = sfield(F_SHEET);
 | ||
|   TToken_string& row = sheet.row(-1);
 | ||
| 
 | ||
| 	row.add(cliente, sheet.cid2index(S_CLIENTE));
 | ||
| 	sheet.enable_cell(sheet.items() - 1, sheet.cid2index(S_ARTICOLO));
 | ||
| 	sheet.enable_cell(sheet.items() - 1, sheet.cid2index(S_DESART));
 | ||
|   sheet.force_update();
 | ||
| }
 | ||
| 
 | ||
| void TTabmod_caf_msk::registra()
 | ||
| {
 | ||
| 	TModule_table caf("&CAF");
 | ||
|   TSheet_field& sheet = sfield(F_SHEET);
 | ||
| 
 | ||
|   FOR_EACH_SHEET_ROW(sheet, r, riga)
 | ||
|   {
 | ||
|     caf.zero();
 | ||
|     TToken_string& row = *(TToken_string*)riga;
 | ||
|     TString80 codtab;
 | ||
|     codtab << row.get(sheet.cid2index(S_CLIENTE));
 | ||
| 		codtab << row.get(sheet.cid2index(S_ARTICOLO));
 | ||
|     
 | ||
| 		const long forn1 = row.get_long(sheet.cid2index(S_FORN1));
 | ||
| 		const long forn2 = row.get_long(sheet.cid2index(S_FORN2));
 | ||
| 		caf.put("CODTAB", codtab);
 | ||
| 		if (forn1 > 0 || forn2 > 0)
 | ||
| 		{
 | ||
| 			caf.put("I0", forn1);
 | ||
| 			caf.put("I1", forn2);      
 | ||
| 			caf.rewrite_write();
 | ||
| 		}
 | ||
| 		else
 | ||
| 			caf.remove();
 | ||
|   }
 | ||
|   riempi_sheet();
 | ||
| }
 | ||
| 
 | ||
| bool TTabmod_caf_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | ||
| { 
 | ||
|   switch(o.dlg())
 | ||
|   {
 | ||
|   case DLG_CANCEL:
 | ||
|     if(e == fe_button && jolly == 0)
 | ||
|     {
 | ||
|       reset(F_CLIENTE);
 | ||
|       reset(F_RAGSOC);
 | ||
|       sfield(F_SHEET).destroy();
 | ||
|       return false;
 | ||
|     }
 | ||
|     break;
 | ||
|   case DLG_SAVEREC:
 | ||
|     if(e == fe_button)
 | ||
|       registra();
 | ||
|     break;
 | ||
|   case DLG_DELREC:
 | ||
|     if(e == fe_button && jolly == 1)
 | ||
|     {
 | ||
|       TMask& msk = sfield(F_SHEET).sheet_mask();
 | ||
|       msk.reset(S_FORN1);
 | ||
|       msk.reset(S_RAGSOC1);
 | ||
|       msk.reset(S_FORN2);
 | ||
|       msk.reset(S_RAGSOC2);
 | ||
|       return false;
 | ||
|     }
 | ||
|     break;
 | ||
|   case F_CLIENTE:
 | ||
|     if(e == fe_modify)
 | ||
|       riempi_sheet();
 | ||
|     break;
 | ||
|   case F_SHEET:
 | ||
|     if(e == se_query_add)
 | ||
|     {
 | ||
|       aggiungi_riga();
 | ||
|       return false;
 | ||
|     }
 | ||
| 		else
 | ||
| 			if (e == se_query_del)
 | ||
| 			{
 | ||
| 				TSheet_field& sheet = (TSheet_field&)o;
 | ||
| 				TToken_string& row = sheet.row(jolly);
 | ||
| 				row.add("0", sheet.cid2index(S_FORN1));
 | ||
| 				row.add("0", sheet.cid2index(S_FORN2));
 | ||
| 				sheet.force_update(jolly);
 | ||
| 				TButton_field& button = (TButton_field&)sheet.sheet_mask().field(DLG_DELREC);
 | ||
| 				return on_field_event(button, fe_button, 1);
 | ||
| 			}
 | ||
| 			else
 | ||
| 				if (e == se_leave)
 | ||
| 				{
 | ||
| 					TSheet_field& sheet = (TSheet_field&)o;
 | ||
| 				
 | ||
| 					sheet.disable_cell(jolly , sheet.cid2index(S_ARTICOLO));
 | ||
| 					sheet.disable_cell(jolly , sheet.cid2index(S_DESART));
 | ||
| 				}
 | ||
| 
 | ||
|     break;
 | ||
|   case S_ARTICOLO:
 | ||
|     if(e == fe_modify)
 | ||
|     {
 | ||
|       TSheet_field& sheet = sfield(F_SHEET);
 | ||
|       const int rsel = sheet.selected();
 | ||
|       const TString& codart = o.get();
 | ||
| 
 | ||
|       FOR_EACH_SHEET_ROW(sheet, r, riga)
 | ||
|       {
 | ||
|         if (r == rsel)
 | ||
|           continue;
 | ||
|         
 | ||
|         TToken_string& row = *(TToken_string*)riga;
 | ||
|         if (row.get(sheet.cid2index(S_ARTICOLO)) == codart)
 | ||
|         {
 | ||
|           TString msg;
 | ||
|           msg << "Attenzione: esiste gi<67> una riga con articolo " << codart;
 | ||
|           warning_box(msg);
 | ||
| 
 | ||
|           sheet.select(rsel);
 | ||
|           TMask& rmsk = sheet.sheet_mask();
 | ||
|           rmsk.set(S_ARTICOLO, "");
 | ||
|           break;
 | ||
|         }
 | ||
|       }
 | ||
|     }
 | ||
|     break;
 | ||
|   default:  break;
 | ||
|   }
 | ||
|   return true;
 | ||
| }
 | ||
| 
 | ||
| TTabmod_caf_msk::TTabmod_caf_msk() : TAutomask("pd0610100a")
 | ||
| {
 | ||
| }
 | ||
| 
 | ||
| ///////////////////////////////////////////////////////////
 | ||
| // TTabmod_caf_app
 | ||
| ///////////////////////////////////////////////////////////
 | ||
| 
 | ||
| class TTabmod_caf_app: public TSkeleton_application
 | ||
| {
 | ||
| protected:
 | ||
|   virtual bool check_autorization() const {return false;}
 | ||
|   virtual const char * extra_modules() const {return "ve";}
 | ||
|   virtual void main_loop();
 | ||
|   void elabora();
 | ||
| };
 | ||
| 
 | ||
| void TTabmod_caf_app::elabora()
 | ||
| {
 | ||
| }
 | ||
| 
 | ||
| void TTabmod_caf_app::main_loop()
 | ||
| {
 | ||
|   TTabmod_caf_msk m;
 | ||
|   while (m.run() == K_ENTER)
 | ||
| 	{
 | ||
| 		elabora();
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| int pd0610100(int argc, char* argv[])
 | ||
| {  
 | ||
|   TTabmod_caf_app app;
 | ||
|   app.run(argc, argv, TR("Tabella Clienti/Articoli/Fornitori"));
 | ||
|   return 0;
 | ||
| }
 |