using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace SigStock
{
public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer
, MercatorUi.ICustomizers.IFormClosedCustomizer
, MercatorUi.ICustomizers.IStringUpdater
, MercatorUi.ICustomizers.IFormValidateCustomizer
{
public string StringUpdate(string StringToModify) //modification de la requête de la grille du disponible pour tenir compte d'une nouvelle colonne.
{
if (Api.StrExtract(StringToModify, "<ID>", "</ID>") == "STOCKDISPO") // ceci permet de ne modifier que la requête de la grille de disponible, sans modifier les requêtes des autres grilles du signalétique article
{
StringToModify = StringToModify.Replace("dispo.stockmax,", "dispo.stockmax,dispo.loc,dispo.loc as loc_old,");
StringToModify = StringToModify.Replace("sum(stockmax),", "sum(stockmax),'','',");
}
return StringToModify;
}
public void FormLoadCustomize(System.Windows.Forms.Form WindowsForm)
{
MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)WindowsForm;
List<Control> l = sigForm.FindMovableControlsByType(typeof(MercatorUi.Forms.Sig.SigGrids.StockDispo));
if (l.Count == 0)
return;
MercatorUi.Forms.Sig.SigGrids.StockDispo stockDispo = (MercatorUi.Forms.Sig.SigGrids.StockDispo)l[0];
stockDispo.AfterColumnsCreated += new MercatorUi.MovableControls.MovableGrid.AfterColumnsCreatedHandler(stockDispo_AfterColumnsCreated); //Pour ajouter la nouvelle colonne
stockDispo.AfterWrite += new MercatorUi.MovableControls.MovableGrid.AfterWriteHandler(stockDispo_AfterWrite); //Pour aller écrire dans la DB les modifications
}
public void FormClosedCustomize(System.Windows.Forms.Form WindowsForm)
{
MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)WindowsForm;
List<Control> l = sigForm.FindMovableControlsByType(typeof(MercatorUi.Forms.Sig.SigGrids.StockDispo));
if (l.Count == 0)
return;
MercatorUi.Forms.Sig.SigGrids.StockDispo stockDispo = (MercatorUi.Forms.Sig.SigGrids.StockDispo)l[0];
stockDispo.AfterColumnsCreated -= new MercatorUi.MovableControls.MovableGrid.AfterColumnsCreatedHandler(stockDispo_AfterColumnsCreated);
stockDispo.AfterWrite -= new MercatorUi.MovableControls.MovableGrid.AfterWriteHandler(stockDispo_AfterWrite);
}
private void stockDispo_AfterColumnsCreated(Object sender, EventArgs e) // ajouter la colonne "Localisation"
{
MercatorUi.Forms.Sig.SigGrids.StockDispo stockDispo = (MercatorUi.Forms.Sig.SigGrids.StockDispo)sender;
stockDispo.Grid.Columns.Add("loc", _Divers.Iif_langue(Globals.Langue, "Localisation", "Localisation", "Localisation"));
stockDispo.Grid.Columns["loc"].Width = 85;
stockDispo.Grid.Columns["loc"].ReadOnly = false;
stockDispo.Grid.Columns["loc"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
stockDispo.Grid.Columns["loc"].DataPropertyName = "loc";
stockDispo.Grid.Columns.Add("loc_old", "");
stockDispo.Grid.Columns["loc_old"].Width = 0;
stockDispo.Grid.Columns["loc_old"].ReadOnly = true;
stockDispo.Grid.Columns["loc_old"].DataPropertyName = "loc_old";
stockDispo.Grid.Columns["loc_old"].Visible = false;
}
private void stockDispo_AfterWrite(object sender, EventArgs e)//Pour aller écrire dans la DB les modifications sur la nouvelle colonne
{
MercatorUi.Forms.Sig.SigGrids.StockDispo stockDispo = (MercatorUi.Forms.Sig.SigGrids.StockDispo)sender;
MercatorUi.Forms.Sig.SigForm formStock = (MercatorUi.Forms.Sig.SigForm)stockDispo.Form;
if (stockDispo.LastIdFilled == formStock.DataSourceRow["s_id"].ToString())
{
foreach (DataGridViewRow row in stockDispo.Grid.Rows)
{
if (row.Cells["loc"].Value.ToString().Trim() != row.Cells["loc_old"].Value.ToString().Trim())
{
SqlCommand oCommand = new SqlCommand("update dispo set loc = @loc where id_stock = @id_stock and id_magasin = @id_magasin");
oCommand.Parameters.Add(new SqlParameter("@id_stock", SqlDbType.Char)).Value = formStock.DataSourceRow["s_id"].ToString();
oCommand.Parameters.Add(new SqlParameter("@id_magasin", SqlDbType.Char)).Value = row.Cells["id"].Value;
oCommand.Parameters.Add(new SqlParameter("@loc", SqlDbType.Char)).Value = row.Cells["loc"].Value;
Api.SqlExec(Globals.RepData, oCommand);
}
}
}
}
}
}