Patch level : 12.0
Files correlati : cg Commento: Modificata leggermente la logica per abbinare forzatamente un documento elettronico ad un movimento di prima nota. La soluzione non è delle più eleganti ma è fatta così per farla coesistere con la logica precedente. Quando l'utente abbina manualmente i documenti dalla prima nota, una volta chiusa la maschera dell abbinamento all fppro, in prima nota vengono spenti i campo cancella ed elimina in modo che l'utente sia obbligato a registrare il movimento. Se si lascia all'utente la possibilità di non registrare si crea la casistica in cui il documento risulta collegato per l'fppro (perche la query sql è già stata fatta) ma gli archivi di campo non vengono aggiornati quindi in MOV il documento non risulta collegato
This commit is contained in:
		
							parent
							
								
									7ae80a0181
								
							
						
					
					
						commit
						e413e6d0d9
					
				@ -1536,6 +1536,7 @@ void TPrimanota_application::write_fppro()
 | 
			
		||||
{
 | 
			
		||||
	if (main_app().has_module(FPAUT) && !ini_get_bool(CONFIG_INSTALL, "Main", "SkipFPPRO"))
 | 
			
		||||
	{
 | 
			
		||||
		
 | 
			
		||||
		// Controllo se la registrazione ha avuto effetto anche su FPPRO allora salvo riferimento sul mov
 | 
			
		||||
		if (save_fppro() > 0 && !save_dbmov())
 | 
			
		||||
			message_box(
 | 
			
		||||
@ -1667,8 +1668,15 @@ int TPrimanota_application::write(const TMask& m)
 | 
			
		||||
      if (movcoll != 0L)
 | 
			
		||||
			  set_movcoll(movcoll, numreg);
 | 
			
		||||
		}
 | 
			
		||||
		if (!_coll_forzato)
 | 
			
		||||
			write_fppro();
 | 
			
		||||
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			TMask& msk = curr_mask();
 | 
			
		||||
			msk.enable(DLG_CANCEL, true);
 | 
			
		||||
			msk.enable(DLG_QUIT, true);
 | 
			
		||||
			_coll_forzato = false;
 | 
			
		||||
		}
 | 
			
		||||
    _saldi.registra();
 | 
			
		||||
    check_saldi();
 | 
			
		||||
    
 | 
			
		||||
@ -1791,8 +1799,15 @@ int TPrimanota_application::rewrite(const TMask& m)
 | 
			
		||||
  const int err = _rel->rewrite(true);
 | 
			
		||||
  if (err == NOERR)
 | 
			
		||||
  {
 | 
			
		||||
		if (!_coll_forzato)
 | 
			
		||||
			write_fppro();
 | 
			
		||||
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			TMask& msk = curr_mask();
 | 
			
		||||
			msk.enable(DLG_CANCEL, true);
 | 
			
		||||
			msk.enable(DLG_QUIT, true);
 | 
			
		||||
			_coll_forzato = false;
 | 
			
		||||
		}
 | 
			
		||||
    _saldi.registra();
 | 
			
		||||
    check_saldi();
 | 
			
		||||
    
 | 
			
		||||
@ -2744,6 +2759,63 @@ void TPrimanota_application::mask2ini(const TMask& msk, TConfig& ini)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//QUI/
 | 
			
		||||
bool TPrimanota_application::collega_fppro(TString fpprokeys)
 | 
			
		||||
{
 | 
			
		||||
	TMask& msk = curr_mask();
 | 
			
		||||
	bool ok = true;
 | 
			
		||||
 | 
			
		||||
	// Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP
 | 
			
		||||
	if (!has_f1_db(msk))
 | 
			
		||||
	{
 | 
			
		||||
		error_box(TR("ATTENZIONE! F1 assente, contattare l'assistenza!"));
 | 
			
		||||
		ok &= false;
 | 
			
		||||
	}	
 | 
			
		||||
 | 
			
		||||
	const TDate     data_operazione(msk.get(F_DATAREG));
 | 
			
		||||
	const TDate     data_documento(msk.get(F_DATADOC));
 | 
			
		||||
 | 
			
		||||
	// Controllo che sto registrando un documento d'acquisto
 | 
			
		||||
	if (!check_causale(msk.get(F_CODCAUS), data_operazione.year()))
 | 
			
		||||
	{
 | 
			
		||||
		error_box(TR("ATTENZIONE! Il movimento è di acquisto!"));
 | 
			
		||||
		ok &= false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const TString&  numero_docext = msk.get(F_NUMDOCEXT);
 | 
			
		||||
	real            tot_doc = msk.get_real(F_TOTALE);
 | 
			
		||||
	const real      ritfis = msk.get_real(F_RITFIS);
 | 
			
		||||
	const real      ritsoc = msk.get_real(F_RITSOC);
 | 
			
		||||
	tot_doc = tot_doc + ritfis + ritsoc;
 | 
			
		||||
	TToken_string    fppro_keys(fpprokeys, ';');
 | 
			
		||||
	const TString&  keyprginvio = fppro_keys.get();
 | 
			
		||||
	const TString&  keyheaderfatt = fppro_keys.get();
 | 
			
		||||
	const TString&  keybodyfatt = fppro_keys.get();
 | 
			
		||||
	const int numregcont = msk.get_int(F_NUMREG);
 | 
			
		||||
	const int clifor = msk.get_int(F_CODCLIFOR);
 | 
			
		||||
 | 
			
		||||
	TString update_query;
 | 
			
		||||
	update_query << "UPDATE FPPRO00F\n" <<
 | 
			
		||||
		"SET PZ_TIPOCF = 'F', PZ_CLIFOR = '" << clifor << "', PZ_DATACONT = '" << TDate(TODAY).date2ansi() << "', " <<
 | 
			
		||||
		"PZ_NUMREGCONT = '" << numregcont << "', PZ_DATAREGCONT = '" << data_operazione.date2ansi() << "'\n" <<
 | 
			
		||||
		"WHERE PZ_KEYPRGINVIO = '" << keyprginvio << "' AND PZ_KEYHEADERFATT = '" << keyheaderfatt << "' AND PZ_KEYBODYFATT = '" << keybodyfatt << "';";
 | 
			
		||||
 | 
			
		||||
	fp_db().sq_set_exec(update_query);
 | 
			
		||||
	ok &= fp_db().sq_commit();
 | 
			
		||||
	if (!ok)
 | 
			
		||||
	{
 | 
			
		||||
		error_box("Attenzione non e' stato possibile registrare la fattura nel database.");
 | 
			
		||||
		save_dbmov(true);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		_coll_forzato = true;
 | 
			
		||||
		msk.enable(DLG_CANCEL, false);
 | 
			
		||||
		msk.enable(DLG_QUIT, false);
 | 
			
		||||
	}
 | 
			
		||||
	return ok;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int TPrimanota_application::save_fppro()
 | 
			
		||||
{
 | 
			
		||||
  TMask& msk = curr_mask();
 | 
			
		||||
 | 
			
		||||
@ -4310,6 +4310,7 @@ bool TPro_msk::riporta(TMask_field& f)
 | 
			
		||||
		//return true;
 | 
			
		||||
	bool ok = false;
 | 
			
		||||
	TSheet_field& sf = msk.sfield(F_SHEETFPPROS);
 | 
			
		||||
	TString fpprokeys;
 | 
			
		||||
 | 
			
		||||
	FOR_EACH_SHEET_ROW(sf, nr, row)
 | 
			
		||||
	{
 | 
			
		||||
@ -4317,6 +4318,7 @@ bool TPro_msk::riporta(TMask_field& f)
 | 
			
		||||
		{
 | 
			
		||||
			app().pro_mask()->set_doc(sf, nr);
 | 
			
		||||
		  _riporta = f.dlg() == DLG_OK;
 | 
			
		||||
			fpprokeys = sf.get_str_row_cell(nr, F_KEYFPPROS);
 | 
			
		||||
			ok = true;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
@ -4328,13 +4330,26 @@ bool TPro_msk::riporta(TMask_field& f)
 | 
			
		||||
		message_box("Nessun documento selezionato.");
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		if (!fpprokeys.empty()) 
 | 
			
		||||
		{
 | 
			
		||||
			app().collega_fppro(fpprokeys);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		app().curr_mask().enable(DLG_LINK, false);
 | 
			
		||||
		app().curr_mask().enable(DLG_EDIT, true);
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	msk.stop_run(K_QUIT);
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TPro_msk::riportaNumeroRegistrazione(int n) 
 | 
			
		||||
{
 | 
			
		||||
	
 | 
			
		||||
	bool ok = false;
 | 
			
		||||
	return ok;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TPro_msk::fppro_selfatt() const
 | 
			
		||||
{
 | 
			
		||||
	const TMask& mask = *this;
 | 
			
		||||
 | 
			
		||||
@ -95,6 +95,7 @@ public:
 | 
			
		||||
 | 
			
		||||
  // Carica documenti FPPRO sulla maschera
 | 
			
		||||
  bool riporta(TMask_field& f);
 | 
			
		||||
	bool riportaNumeroRegistrazione(int n);
 | 
			
		||||
  bool load_fppro_mask(TMask & msk);
 | 
			
		||||
 | 
			
		||||
  TPro_msk(TMask& cg_msk);
 | 
			
		||||
@ -160,6 +161,7 @@ class TPrimanota_application : public TRelation_application
 | 
			
		||||
//	bool _f1_ini;
 | 
			
		||||
//  bool _f1_liq;
 | 
			
		||||
  TString _num_doc_rif_partite;
 | 
			
		||||
	bool _coll_forzato = false;  // Abbinato manualmente un documento all FPPRO
 | 
			
		||||
  friend class TPro_msk;
 | 
			
		||||
 | 
			
		||||
  static bool showpartite_handler(TMask_field& f, KEY k);
 | 
			
		||||
@ -279,6 +281,8 @@ protected:                              // TApplication
 | 
			
		||||
	// Metodo chiamato dalla write e rewrite per salvare su db fatt.
 | 
			
		||||
	void write_fppro();
 | 
			
		||||
  static bool has_tot_doc(TToken_string& fppro_keys);
 | 
			
		||||
	//Collega un movimento contabile al suo doc elettronico
 | 
			
		||||
	bool collega_fppro(TString fpprokeys);
 | 
			
		||||
	// Salvo dati fornitore e registrazione contabile sul db FPPRO
 | 
			
		||||
  int save_fppro();
 | 
			
		||||
	// Salva sul movimento il riferimento al documento in FPPRO (keys)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user