public async Task OnHandle(string handle, params object[] argument) { switch (handle) { case "AddProductSheet": { var kvp = this.SheetByWorksheet.FirstOrDefault(v => Equals(v.Key.Workbook, this.ActiveWorkbook) && v.Value is ProductSheet); ProductSheet productSheet; if (kvp.Value == null) { var iWorksheet = this.ActiveWorkbook.AddWorksheet(0); iWorksheet.Name = "Products"; productSheet = new ProductSheet(this, iWorksheet); this.SheetByWorksheet.Add(iWorksheet, productSheet); } else { productSheet = (ProductSheet)this.SheetByWorksheet[kvp.Key]; } await productSheet.Refresh().ConfigureAwait(false); productSheet.Sheet.IsActive = true; } break; case "ListCovid19Sheet": { var kvp = this.SheetByWorksheet.FirstOrDefault(v => Equals(v.Key.Workbook, this.ActiveWorkbook) && v.Value is Covid19Sheet); Covid19Sheet covid19Sheet = null; if (kvp.Value == null) { var ws = this.ActiveWorkbook.AddWorksheet(0); ws.Name = "Covid19"; covid19Sheet = new Covid19Sheet(this, ws); this.SheetByWorksheet.Add(ws, covid19Sheet); } else { covid19Sheet = (Covid19Sheet)this.SheetByWorksheet[kvp.Key]; } await covid19Sheet.Refresh().ConfigureAwait(false); covid19Sheet.Sheet.IsActive = true; } break; case "AddDemoSheet": { var wsCount = this.SheetByWorksheet.Count(v => Equals(v.Key.Workbook, this.ActiveWorkbook) && v.Value is DemoSheet); var iWorksheet = this.ActiveWorkbook.AddWorksheet(0); iWorksheet.Name = $"Demo {wsCount}"; var demoSheet = new DemoSheet(this, iWorksheet); this.SheetByWorksheet.Add(iWorksheet, demoSheet); await demoSheet.Refresh().ConfigureAwait(false); demoSheet.Sheet.IsActive = true; } break; case "InvoicesSheet": { var kvp = this.SheetByWorksheet.FirstOrDefault(v => Equals(v.Key.Workbook, this.ActiveWorkbook) && v.Value is InvoicesSheet); InvoicesSheet invoicesSheet; if (kvp.Value == null) { var iWorksheet = this.ActiveWorkbook.AddWorksheet(0); iWorksheet.Name = KnownNames.InvoicesSheetName; invoicesSheet = new InvoicesSheet(this, iWorksheet); this.SheetByWorksheet.Add(iWorksheet, invoicesSheet); } else { invoicesSheet = (InvoicesSheet)this.SheetByWorksheet[kvp.Key]; } await invoicesSheet.Refresh().ConfigureAwait(false); invoicesSheet.Sheet.IsActive = true; } break; case "AddInvoiceSheet": { var wsCount = this.Services.Database.Count <Invoice>(); var iWorksheet = this.ActiveWorksheet; var invoiceSheet = new InvoiceSheet(this, iWorksheet); this.SheetByWorksheet.Add(iWorksheet, invoiceSheet); await invoiceSheet.Refresh().ConfigureAwait(false); //invoiceSheet.Sheet.IsActive = true; } break; case "InsertPicture": { if (this.SheetByWorksheet.TryGetValue(this.ActiveWorksheet, out var iSheet)) { if (iSheet is DemoSheet demoSheet) { demoSheet.InsertPicture(); } } } break; case "SaveInvoiceSheet": { if (this.SheetByWorksheet.TryGetValue(this.ActiveWorksheet, out var iSheet)) { if (iSheet is InvoiceSheet invoiceSheet) { await invoiceSheet.Save(); } } foreach (ISheet sheet in this.SheetByWorksheet.Where(v => v.Value is InvoicesSheet).Select(v => v.Value)) { sheet.IsWorksheetUpToDate = false; } } break; case "SaveOrganisationsSheet": { if (this.SheetByWorksheet.TryGetValue(this.ActiveWorksheet, out var iSheet)) { if (iSheet is OrganisationsSheet organisationsSheet) { await organisationsSheet.Save(); } } foreach (ISheet sheet in this.SheetByWorksheet.Where(v => v.Value is OrganisationsSheet).Select(v => v.Value)) { sheet.IsWorksheetUpToDate = false; } } break; case "SaveAsPDFInvoiceSheet": { if (this.SheetByWorksheet.TryGetValue(this.ActiveWorksheet, out var iSheet)) { if (iSheet is InvoiceSheet invoiceSheet) { invoiceSheet.SaveAsPDF(); } } } break; case "OrganisationsSheet": { var kvp = this.SheetByWorksheet.FirstOrDefault(v => Equals(v.Key.Workbook, this.ActiveWorkbook) && v.Value is OrganisationsSheet); OrganisationsSheet organisationsSheet; if (kvp.Value == null) { var iWorksheet = this.ActiveWorkbook.AddWorksheet(0); iWorksheet.Name = "Organisations"; organisationsSheet = new OrganisationsSheet(this, iWorksheet); this.SheetByWorksheet.Add(iWorksheet, organisationsSheet); } else { organisationsSheet = (OrganisationsSheet)this.SheetByWorksheet[kvp.Key]; } await organisationsSheet.Refresh().ConfigureAwait(false); organisationsSheet.Sheet.IsActive = true; } break; case "PaymentTermsSheet": { var kvp = this.SheetByWorksheet.FirstOrDefault(v => Equals(v.Key.Workbook, this.ActiveWorkbook) && v.Value is PaymentTermsSheet); PaymentTermsSheet paymentTermsSheet; if (kvp.Value == null) { var iWorksheet = this.ActiveWorkbook.AddWorksheet(0); iWorksheet.Name = KnownNames.PaymentTermsSheetName; paymentTermsSheet = new PaymentTermsSheet(this, iWorksheet); this.SheetByWorksheet.Add(iWorksheet, paymentTermsSheet); } else { paymentTermsSheet = (PaymentTermsSheet)this.SheetByWorksheet[kvp.Key]; } await paymentTermsSheet.Refresh().ConfigureAwait(false); paymentTermsSheet.Sheet.IsActive = true; } break; } }
private async void ThisAddIn_WorkbookOpen(InteropWorkbook Wb) { // this has been marked as a showCase workbook. So threat it as one we know. var iWorkbook = this.AddIn.New(Wb); object result = null; if (iWorkbook.TryGetCustomProperty(AppConstants.KeyWorkbook, ref result)) { if (Convert.ToBoolean(result)) { // Check the Custom Properties for existing data, and if so, instantiate those sheets. object tagId = null; { //// We need to have an InvoicesSheet //var interopWorksheet = this.GetWorkSheet(Wb, iWorkbook, nameof(AppConfigSheet)); //if (interopWorksheet == null) //{ // var iWorksheet = iWorkbook.AddWorksheet(0); // iWorksheet.Name = KnownNames.AppConfigSheetName; // interopWorksheet = Wb.ActiveSheet; //} //var worksheet = new Allors.Excel.Interop.Worksheet(iWorkbook, interopWorksheet); //var appConfigSheet = new AppConfigSheet(this.AddIn.Program, worksheet); //await appConfigSheet.Refresh(); //((Program)this.AddIn.Program).SheetByWorksheet.Add(worksheet, appConfigSheet); } if (iWorkbook.TryGetCustomProperty(KnownNames.PaymentTermTag, ref tagId)) { // We need to have an InvoicesSheet var interopWorksheet = this.GetWorkSheet(Wb, iWorkbook, nameof(PaymentTermsSheet)); if (interopWorksheet == null) { var iWorksheet = iWorkbook.AddWorksheet(0); iWorksheet.Name = KnownNames.PaymentTermsSheetName; interopWorksheet = Wb.ActiveSheet; } var worksheet = new Allors.Excel.Interop.Worksheet(iWorkbook, interopWorksheet); var paymentTermsSheet = new PaymentTermsSheet(this.AddIn.Program, worksheet); await paymentTermsSheet.Load(iWorkbook); ((Program)this.AddIn.Program).SheetByWorksheet.Add(worksheet, paymentTermsSheet); } if (iWorkbook.TryGetCustomProperty(KnownNames.InvoiceTag, ref tagId)) { // We need to have an OrganisationsSheet var interopWorksheet = this.GetWorkSheet(Wb, iWorkbook, nameof(InvoicesSheet)); if (interopWorksheet == null) { var iWorksheet = iWorkbook.AddWorksheet(0); iWorksheet.Name = KnownNames.InvoicesSheetName; interopWorksheet = Wb.ActiveSheet; } var worksheet = new Allors.Excel.Interop.Worksheet(iWorkbook, interopWorksheet); var invoicesSheet = new InvoicesSheet(this.AddIn.Program, worksheet); await invoicesSheet.Load(iWorkbook); ((Program)this.AddIn.Program).SheetByWorksheet.Add(worksheet, invoicesSheet); } if (iWorkbook.TryGetCustomProperty(KnownNames.OrganisationTag, ref tagId)) { // We need to have an InvoicesSheet var interopWorksheet = this.GetWorkSheet(Wb, iWorkbook, nameof(OrganisationsSheet)); if (interopWorksheet == null) { var iWorksheet = iWorkbook.AddWorksheet(0); iWorksheet.Name = KnownNames.OrganisationsSheetName; interopWorksheet = Wb.ActiveSheet; } var worksheet = new Allors.Excel.Interop.Worksheet(iWorkbook, interopWorksheet); var organisationsSheet = new OrganisationsSheet(this.AddIn.Program, worksheet); await organisationsSheet.Load(iWorkbook); ((Program)this.AddIn.Program).SheetByWorksheet.Add(worksheet, organisationsSheet); } } } else { //TODO: remove the iWorkbook } }