С самого начала было решено, что удаление заказов менеджерам будет запрещено. Тем более удаление принятых к производству заказов. В принципе, долгое время все было прекрасно, никому не требовалось удалять старые заказы. Но по прошествии года оказалось довольно много заказов, которые были созданы только для просчета. Давать доступ менеджерам к полному удалению заказов через контекстное меню желания особого не было, и потому появился такой скриптик (листинг ниже).
При выполнении этого скрипта мы сначала проверяем, принят ли заказ к производству (то есть заполнена ли фактическая дата у этапа «Принятие» (id=34)), и если заказ принят — выводим ошибку и отменяем удаление. Если же заказ не принят, просим подтвердить желание удалить, и удаляем...
Листинг.
1 | using System; using System.IO; using System.Text; using System.Data; using System.Collections.Generic; using System.Windows.Forms; using System.Reflection; using Atechnology.DBConnections2; using Atechnology.winDraw.Model; using Atechnology.winDraw; using Atechnology.Components; using Atechnology.ecad.Document; namespace Atechnology.ecad.Calc{ public class RunCalc { #region Variables int err = 0; #endregion #region Стартовый метод public void Run(dbconn _db, DataRow [] _dr){ try { if (_dr.Length == 0) return; DataRow dr_order = _dr[0]; _db.OpenDB(); DataRow drdiract = _db.GetDataRow(@"select top 1 factdate from orderdiraction where deleted is null and iddiraction = 34 and idorder = "+dr_order["idorder"].ToString()); if (drdiract != null && drdiract["factdate"] != DBNull.Value){//Принятый - выходим AtMessageBox.Show("Заказ Принят и НЕ может быть удален!!!"); return; } if (AtMessageBox.Show("Вы собираетесь удалить заказ и все услуги по нему!!! \n\n Вы уверены???","Удаление заказа",MessageBoxButtons.YesNo,MessageBoxIcon.Question) != DialogResult.Yes) return; if (AtMessageBox.Show("Помните, восстановить удаленный заказ НЕВОЗМОЖНО!!! \n\n Таки удаляем???","Удаление заказа",MessageBoxButtons.YesNo,MessageBoxIcon.Question) != DialogResult.Yes) return; _db.command.CommandText = @" update orders set deleted = getdate() where idorder = @idorder update delivdoc set deleted = getdate() where idorder = @idorder update installdoc set deleted = getdate() where idorder = @idorder update servicedoc set deleted = getdate() where idorderdest = @idorder"; _db.command.Parameters.Clear(); _db.command.Parameters.Add("@idorder",SqlDbType.Int).Value = dr_order["idorder"]; _db.command.ExecuteNonQuery(); dr_order.Delete(); } catch (Exception e){ MessageBox.Show("Ошибка скрипта!\n\n" + e.Message + "\n\n" + e.StackTrace +"\n\nКонтрольная точка - " + err,"Ошибка скрипта",MessageBoxButtons.OK,MessageBoxIcon.Error ); } } #endregion } } |