using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using MercatorApi;
using MercatorUi;
namespace SigStock
{
public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer, MercatorUi.ICustomizers.IFormClosedCustomizer
{
public void FormLoadCustomize(Form form)
{
MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)form;
List<Control> l = sigForm.FindMovableControlsByType(typeof(MercatorUi.Forms.Sig.SigGrids.ArtLiens));
if (l.Count == 0)
return;
MercatorUi.Forms.Sig.SigGrids.ArtLiens artLiens = (MercatorUi.Forms.Sig.SigGrids.ArtLiens)l[0];
artLiens.AfterRead += new MercatorUi.MovableControls.MovableGrid.AfterReadHandler(artLiens_AfterRead);
artLiens.TotalUpdated += new EventHandler(artLiens_TotalUpdated);
artLiens.CheckBoxValueChanged += new MercatorUi.Forms.Sig.SigGrids.ArtLiens.CheckBoxValueChangedEventHandler(artLiens_CheckBoxValueChanged);
}
public void FormClosedCustomize(Form form)
{
MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)form;
List<Control> l = sigForm.FindMovableControlsByType(typeof(MercatorUi.Forms.Sig.SigGrids.ArtLiens));
if (l.Count == 0)
return;
MercatorUi.Forms.Sig.SigGrids.ArtLiens artLiens = (MercatorUi.Forms.Sig.SigGrids.ArtLiens)l[0];
artLiens.AfterRead -= new MercatorUi.MovableControls.MovableGrid.AfterReadHandler(artLiens_AfterRead);
artLiens.TotalUpdated -= new EventHandler(artLiens_TotalUpdated);
artLiens.CheckBoxValueChanged -= new MercatorUi.Forms.Sig.SigGrids.ArtLiens.CheckBoxValueChangedEventHandler(artLiens_CheckBoxValueChanged);
}
void artLiens_AfterRead(object sender, EventArgs e)
{
MercatorUi.Forms.Sig.SigGrids.ArtLiens artLiens = (MercatorUi.Forms.Sig.SigGrids.ArtLiens)sender;
MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)artLiens.Form;
string currentId = sigForm.DataSourceRow["S_ID"].ToString();
if (artLiens.LastIdFilled != currentId)
artLiens.FillWithData();
}
void artLiens_TotalUpdated(object sender, EventArgs e)
{
MercatorUi.Forms.Sig.SigGrids.ArtLiens artLiens = (MercatorUi.Forms.Sig.SigGrids.ArtLiens)sender;
MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)artLiens.Form;
if (sigForm.IsFiltring || (artLiens.Grid == null) || (artLiens.Grid.DataSource == null) || (artLiens.Grid.Rows.Count == 0))
return;
StringBuilder sbReqSql = new StringBuilder(); // on va construire une requête SQL unique pour l'ensemble des articles de la grille ArtLiens
foreach (DataGridViewRow dgr in artLiens.Grid.Rows)
{
string id_lien = dgr.Cells["id_lien"].Value.ToString();
if ((id_lien != "") && Convert.ToBoolean(dgr.Cells["ven"].Value))
{
if (sbReqSql.Length == 0)
sbReqSql.AppendFormat("(s_id='{0}')", Api.UnquoteSql(id_lien));
else
sbReqSql.AppendFormat(" or (s_id='{0}')", Api.UnquoteSql(id_lien));
}
}
if (sbReqSql.Length == 0) // la grille ne contient aucun article pour lequel on a coché "V"
return;
DataSet ds = Api.Zselect(Globals.RepData, "select s_id,s_prix_ht from stock where " + sbReqSql.ToString());
if (ds == null)
return;
double d = 0;
foreach (DataGridViewRow dgr in artLiens.Grid.Rows)
{
string id_lien = dgr.Cells["id_lien"].Value.ToString();
if ((id_lien != "") && Convert.ToBoolean(dgr.Cells["ven"].Value))
{
DataRow[] rowsStock = ds.Tables[0].Select(string.Format("s_id='{0}'", Api.UnquoteSql(dgr.Cells["id_lien"].Value.ToString())));
if (rowsStock.Length > 0)
d += Convert.ToDouble(dgr.Cells["q"].Value) * Convert.ToDouble(rowsStock[0]["s_prix_ht"]);
}
}
Api.SmartReplace(sigForm.DataSourceRow, "S_PRIX_HT", Math.Round(d, MercatorUi.Globals.DEC_DEV_B)); // SmartReplace ne fait réellement le remplacement qui si la valeur est différente
}
void artLiens_CheckBoxValueChanged(object sender, MercatorUi.Forms.Sig.SigGrids.ArtLiens.CheckBoxValueChangedEventArgs e)
{
if (e.ColumnName == "ven") // on a coché / déc
artLiens_TotalUpdated(sender, null);
}
}
}