using MercatorPenguin; using MercatorPenguin.EditCustomizers; using MercatorExtensions; namespace TestPenguinCustomizerPicking { public class CustomizerPicking : BaseEditPickingCustomizer { public CustomizerPicking(ConstructorParams constructorParams) : base(constructorParams) { } public override async Task OnBeforeDeleteLineAsync(BeforeDeleteLineEventArgs e) { if (!await Dialogs.AnswerYesNo(Page, $"Voulez-vous vraiment supprimer cette ligne {e.Ligne["id_article"]} sur ce picking ?")) { e.CancelDeleteLine = true; } } public override async void OnAfterDeleteLine(AfterDeleteLineEventArgs e) { await Dialogs.Stop(Page, $"La ligne a été sumprimée avec succès !"); } public override async Task OnBeforeChangeLineAsync(BeforeChangeLineEventArgs e) { if (!await Dialogs.AnswerYesNo(Page, $"Voulez-vous vraiment modifier la colonne {e.ColumnToChange} de cette ligne {e.Line["id_article"]} avec cette nouvelle valeur {e.NewValue} ?")) { e.CancelChangeLine = true; } } public override async Task OnAfterChangeLineAsync(AfterChangeLineEventArgs e) { await Dialogs.Stop(Page, $"Cette ligne {e.Line["id_article"]} vient de modifier cette colonne {e.ColumnToChange} depuis cette valeur {e.OldValue} vers {e.Line[e.ColumnToChange]}?"); } public override async Task OnAfterInsertItemAsync(AfterInsertItemEventArgs e) { var editEntryBehavior = Controls.OfType<IEditPickingBehavior>().FirstOrDefault(); if (editEntryBehavior == null) return; var editEntry = Controls.OfType<IEditEntry>().FirstOrDefault(c => c.Source?.Equals(editEntryBehavior.OutOfDocReasonSource, StringComparison.InvariantCultureIgnoreCase) ?? false); if (editEntry.Text == "Article de remplacement") { List<ItemString> items = new List<ItemString>(); foreach (var d in Lignes.DataTable.RowsEnumerable(r => r.Value<double>("Q_ORI").CompareTo(0, 2) != 0)) items.Add(new ItemString() { Id = d["id_article"].ToString(), Lib = d["designatio"].ToString() }); var ret = await Dialogs.AskList(Page, "Remplace quel article ?", items); if (ret != null) { editEntry.Text = editEntry.Text + $" pour l'article : {ret.Lib}({ret.Id})"; } } } public override async Task OnBeforeSaveAsync(BeforeSaveEventArgs e) { if (!await Dialogs.AnswerYesNo(Page, "Voulez-vous vraiment enregistrer les modifications sur ce picking ?")) { e.CancelSave = true; } } public override async Task OnAfterSaveAsync(AfterSaveEventArgs e) { await Dialogs.Stop(Page, "Le picking a été enregistrée avec succès !"); } } public class ItemString { public string Id { get; set; } public string Lib { get; set; } public override string ToString() { return Lib; } } }