using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;

namespace SigDest
{
	public class Customizer : MercatorUi.ICustomizers.IFormValidateCustomizer,
							  MercatorUi.ICustomizers.ISigCreated,
							  MercatorUi.ICustomizers.ISigCaptionsChanger

	{
		public void ChangeCaptions(ref Dictionary<MercatorApi.ApiLangues, string> defaultCaptions)
		{ 
			defaultCaptions[ApiLangues.F] = "Vhicules"; 
			defaultCaptions[ApiLangues.N] = "Autos"; 
			defaultCaptions[ApiLangues.E] = "Cars"; 
			defaultCaptions[ApiLangues.D] = "Cars"; 
		} 

		
		public bool FormValidateCustomize(System.Windows.Forms.Form form)
		{
			MercatorUi.Forms.Sig. SigForm sigForm = (MercatorUi.Forms.Sig. SigForm ) form; 
			
			// Avertir que le vhicule est exclu du transfert vers CarPass
			if (Convert.ToInt32(sigForm.DataSourceRow["d_exclu"]) == 1) 
			{ 
				Dialogs.Stop(Api.Iif_langue(Globals.CurrentUser["Langue"].ToString(), "Data will NOT be sent to CarPass !", "Data will NOT be sent to CarPass !", "De gegevens zullen NIET naar carpass verzonden !", "Les donnes NE seront PAS envoyes  CarPass !"));
			}
			
			// Vrifier si le format du numro de chassis correspond. Sinon -> adaptation
			if (sigForm.DataSourceRow["d_cle1"].ToString().Trim().Length > 17 && sigForm.DataSourceRow["d_cle1"].ToString().Substring(0,1) == "%") 
			{ 
				sigForm.DataSourceRow["d_cle1"] = sigForm.DataSourceRow["d_cle1"].ToString().Substring(1, 17);
			}
			
			// Vrifier si la longueur du numro de chassis -> avertissement
			if (sigForm.DataSourceRow["d_cle1"].ToString().Trim().Length != 17)
			{
				Dialogs.Stop(Api.Iif_langue(Globals.CurrentUser["Langue"].ToString(), "Lnge der Fahrgestell-Nr. falsch !", "Wrong chassis number length !", "Incorrecte lengte van wagenstelnummer !", "Longueur du n de chassis incorrecte !")); 
			}
			else
			{
				// Vrifier si le n de chassis n'existe pas
				string d_Id_Cli = sigForm.DataSourceRow["D_ID"].ToString();
				string d_Cle1 = sigForm.DataSourceRow["D_CLE1"].ToString();
				string reqSql = "select Dest.d_Id_Cli, Dest.d_cle2, Dest.d_cle1, dest.d_nom, isnull(cli.c_nom, '') as c_nom from dest left join cli on cli.c_id = dest.d_id_cli WHERE d_sommeil = 0 AND d_cle1 = @d_cle1 AND d_Id_Cli != @d_Id_Cli";
				
				DataSet ds = Api.Zselect(MercatorUi.Globals.RepData, reqSql, new MercatorSqlParam("@D_CLE1", d_Cle1, SqlDbType.Char, 20), new MercatorSqlParam("@D_ID_CLI", d_Id_Cli, SqlDbType.Char, 10));
				
				if (ds != null)
				{
					if (ds.Tables[0].Rows.Count > 0)
					{
						Dialogs.Stop(Api.Iif_langue(Globals.CurrentUser["Langue"].ToString(), "Diese Fahrgestell-Nr. ist bereits dem Kunden [" + (ds.Tables[0].Rows[0]["c_nom"].ToString().Trim()) + "] zugeordnet !", "This chassis number already exist [" + (ds.Tables[0].Rows[0]["c_nom"].ToString().Trim()) + "] !", "Deze wagenstelnummer woordt reeds aan de klant [" + (ds.Tables[0].Rows[0]["c_nom"].ToString().Trim()) + "] toegekend !", "Ce numro de chassis est dj attribu au client [" + (ds.Tables[0].Rows[0]["c_nom"].ToString().Trim()) + "] !")); 
						return false;
					}
				}
			}
			
			
			// Si le n de plaque est complt, vrifier s'il n'existe pas (si le vhicule n'est pas en sommeil) 
			if (sigForm.DataSourceRow["d_cle2"].ToString().Trim().Length != 0)
			{
				string d_Id_Cli = sigForm.DataSourceRow["D_ID"].ToString();
				string d_Cle2 = sigForm.DataSourceRow["D_CLE2"].ToString();
				// Nettoyer le n de plaque pour la comparaison
				d_Cle2 = d_Cle2.Replace("-", "");
				d_Cle2 = d_Cle2.Replace(".", "");
				d_Cle2 = d_Cle2.Replace(" ", "");
				
				string reqSql = "select Dest.d_Id_Cli, Dest.d_cle2, Dest.d_cle1, dest.d_nom, isnull(cli.c_nom, '') as c_nom ";
				reqSql += " from dest ";
				reqSql += " left join cli on cli.c_id = dest.d_id_cli ";
				reqSql += " WHERE d_sommeil = 0 AND replace(replace(replace(d_cle2,' ',''),'.',''),'-','') = @d_cle2 AND d_Id_Cli != @d_Id_Cli";
				
				DataSet ds = Api.Zselect(MercatorUi.Globals.RepData, reqSql, new MercatorSqlParam("@D_CLE2", d_Cle2, SqlDbType.Char, 20), new MercatorSqlParam("@D_ID_CLI", d_Id_Cli, SqlDbType.Char, 10));
				
				if (ds != null)
				{
					if (ds.Tables[0].Rows.Count > 0)
					{
						Dialogs.Stop(Api.Iif_langue(Globals.CurrentUser["Langue"].ToString(), "Dieses Kennzeichen ist bereits dem Kunden [" + (ds.Tables[0].Rows[0]["c_nom"].ToString().Trim()) + "] zugeordnet !", "This plate number already exist [" + (ds.Tables[0].Rows[0]["c_nom"].ToString().Trim()) + "] !", "Deze plaatnummer woordt reeds aan de klant [" + (ds.Tables[0].Rows[0]["c_nom"].ToString().Trim()) + "] toegekend !", "Ce numro de plaque est dj attribu au client [" + (ds.Tables[0].Rows[0]["c_nom"].ToString().Trim()) + "] !")); 
						return false;
					}
				}
			}
			return true ;
		}
		
		
		public void SigCreated(MercatorUi.Sig. Sig Sig) 
		{ 
			// Si duplication, ne pas recopier la date de naissance, le n d'identification, le n TVA et id compta
			Sig.FieldList["D_CLE1"].SetNonDuplicable("");
			Sig.FieldList["D_CLE2"].SetNonDuplicable("");
			Sig.FieldList["D_EXCLU"].SetNonDuplicable(0); 
		}
	} 
}
