using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using System.Windows.Forms; using System.Reflection; using AyaNova.PlugIn; using GZTW.AyaNova.BLL; using System.IO; using System.IO.Compression; //using Newtonsoft.Json; //using Newtonsoft.Json.Serialization; //using ICSharpCode.SharpZipLib.Zip; namespace AyaNova.PlugIn.ClientRemover { class ClientRemover : IAyaNovaPlugin { #region Plugin interface System.Resources.ResourceManager resman = null; private static List ObjectsWeCanDealWith = null; public string PluginName { get { return "ClientRemover"; } } public string PluginVersion { get { return "7.6"; } } public string About { get { return "AyaNova ClientRemover plugin"; } } public Guid PluginID { get { return new Guid("{37486FF1-3F9B-4B37-880E-75B934174ACB}"); } } public System.Drawing.Image PluginSmallIcon { get { return Resource1.ClientRemover16; } } public System.Drawing.Image PluginLargeIcon { get { return Resource1.ClientRemover32; } } public System.Resources.ResourceManager AyaNovaResourceManager { set { resman = value; } get { return resman; } } public bool Initialize(Version AyaNovaVersion, LocalizedTextTable localizedText) { if (AyaNovaVersion.Major < 7) { MessageBox.Show("This ClientRemover plugin requires AyaNova version 7.6 or newer"); return false; } if (AyaNovaVersion.Minor < 6) { MessageBox.Show("This ClientRemover plugin requires AyaNova version 7.6 or newer"); return false; } ObjectsWeCanDealWith = new List(); ObjectsWeCanDealWith.Add(RootObjectTypes.Client); return true; } public void Close() { ; } #region ShowMenu? public bool SingleObjectMenuShow(RootObjectTypes objectType) { return (ObjectsWeCanDealWith.Contains(objectType)); } public bool MultipleObjectsMenuShow(RootObjectTypes objectType) { return (ObjectsWeCanDealWith.Contains(objectType)); } #endregion show menu? public List SingleObjectMenuOptions(RootObjectTypes objectType, object ayaNovaObject) { if (!ObjectsWeCanDealWith.Contains(objectType)) return null; List list = new List(); list.Add(new AyaNovaPluginMenuItem("ClientRemover", "Delete this client and all it's records", null, null)); return list; } public List MultipleObjectsMenuOptions(RootObjectTypes objectType) { if (!ObjectsWeCanDealWith.Contains(objectType)) return null; if (objectType == RootObjectTypes.Nothing) return null; List list = new List(); list.Add(new AyaNovaPluginMenuItem("ClientRemover", "Delete selected clients and all their records", null, null)); return list; } public bool CommandSelectedForList(string commandKey, RootObjectTypes objectType, List objectIDList, object listObject) { if (!User.IsAdmin)//case 3613 { MessageBox.Show("This action can only be done by the AyaNova Administrator account"); return false; } if (objectIDList.Count == 0) { MessageBox.Show("There are no Clients selected in the list\r\nSelect one or more clients first"); return false; } DoDelete(objectIDList); return true;//true=refresh the list } public void CommandSelectedForSingleObject(string commandKey, RootObjectTypes objectType, object ayaNovaObject) { if (!User.IsAdmin) { MessageBox.Show("This action can only be done by the AyaNova Administrator account"); return; } List objectIDList = new List(1); objectIDList.Add(((Client)ayaNovaObject).ID); DoDelete(objectIDList); } #endregion #region DELETE private void DoDelete(List SelectedItems) { //REally delete... this client.... these 14 clients... string sAffected = string.Empty; bool bMultiple = SelectedItems.Count > 1; if (bMultiple) sAffected = "these " + SelectedItems.Count.ToString() + " Clients\r\n"; else sAffected = "this Client\r\n"; DialogResult dr = MessageBox.Show("WARNING!! \r\n\r\n" + "You are about to permanently delete " + sAffected + "and all their related records including the following:\r\n\r\nService workorders, quotes, units, client notes, client users, etc.\r\n\r\n" + "The only way to reverse this will be to restore your AyaNova database from a backup.\r\n\r\n" + "Permanently delete?", "", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button3); if (dr != DialogResult.Yes) return; StringBuilder sbRet = new StringBuilder(); //Delete them foreach (Guid id in SelectedItems) { bool deleted = false; var theName = NameFetcher.GetName(RootObjectTypes.Client, id); sbRet.AppendLine("Attempting to delete client " + theName); sbRet.AppendLine(); try { sbRet.Append(Client.DeleteAllClientWorkorders(id)); sbRet.Append(Client.DeleteAllClientUnits(id)); Client.DeleteItem(id); sbRet.AppendLine("Client deleted\r\n"); deleted = true; } catch (Exception ex) { while (ex.InnerException != null) ex = ex.InnerException; sbRet.AppendLine("Error attempting to delete client:"); sbRet.AppendLine(ex.Message); } if (!deleted) sbRet.AppendLine("\r\nClient " + theName + " was *NOT* deleted\r\n"); if (bMultiple) sbRet.AppendLine("************************************************************"); } CopyableMessageBox d = new CopyableMessageBox(sbRet.ToString()); d.ShowDialog(); } #endregion delete } //eoc }//eons