From aa4f17416f49c9fa339224d59d8d766a823cc6f3 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 30 Jun 2022 22:55:06 +0000 Subject: [PATCH] --- AyaNovaQBI/ApproveCompanyFile.cs | 2 + AyaNovaQBI/MainForm.Designer.cs | 1 + AyaNovaQBI/MainForm.cs | 13 + AyaNovaQBI/SetWOStatus.Designer.cs | 1 + AyaNovaQBI/SetWOStatus.cs | 121 ++-- AyaNovaQBI/util.cs | 927 +++++++++++++++-------------- 6 files changed, 556 insertions(+), 509 deletions(-) diff --git a/AyaNovaQBI/ApproveCompanyFile.cs b/AyaNovaQBI/ApproveCompanyFile.cs index b82b99d..0fa25c2 100644 --- a/AyaNovaQBI/ApproveCompanyFile.cs +++ b/AyaNovaQBI/ApproveCompanyFile.cs @@ -34,6 +34,8 @@ namespace AyaNovaQBI } private void ApproveCompanyFile_Load(object sender, EventArgs e) { + this.btnCancel.Text = util.AyaTranslations["Cancel"]; + this.btnOK.Text = util.AyaTranslations["OK"]; this.lblCompany.Text = _CompanyName; this.lblPath.Text = _CompanyPath; } diff --git a/AyaNovaQBI/MainForm.Designer.cs b/AyaNovaQBI/MainForm.Designer.cs index a0c394f..eee7143 100644 --- a/AyaNovaQBI/MainForm.Designer.cs +++ b/AyaNovaQBI/MainForm.Designer.cs @@ -138,6 +138,7 @@ this.preferencesToolStripMenuItem.Name = "preferencesToolStripMenuItem"; this.preferencesToolStripMenuItem.Size = new System.Drawing.Size(245, 22); this.preferencesToolStripMenuItem.Text = "&Preferences"; + this.preferencesToolStripMenuItem.Click += new System.EventHandler(this.preferencesToolStripMenuItem_Click); // // mapAndImportToolStripMenuItem // diff --git a/AyaNovaQBI/MainForm.cs b/AyaNovaQBI/MainForm.cs index 31ca135..d126128 100644 --- a/AyaNovaQBI/MainForm.cs +++ b/AyaNovaQBI/MainForm.cs @@ -33,6 +33,13 @@ namespace AyaNovaQBI } else { + //Confirm main settings and set any that are missing: + if (await util.ValidateSettings(false) == util.pfstat.Cancel) + { + await util.IntegrationLog("PFC: User settings not completed, user selected cancel"); + Close(); + } + //check if setup is required if (util.QBIntegration.Items.Count == 0) { @@ -100,5 +107,11 @@ namespace AyaNovaQBI { MessageBox.Show("STUB: REFRESH INVOICES"); } + + private async void preferencesToolStripMenuItem_Click(object sender, EventArgs e) + { + await util.ValidateSettings(true); + //TODO: CODE THIS InitInvoices(); + } } } diff --git a/AyaNovaQBI/SetWOStatus.Designer.cs b/AyaNovaQBI/SetWOStatus.Designer.cs index 657240c..67886f5 100644 --- a/AyaNovaQBI/SetWOStatus.Designer.cs +++ b/AyaNovaQBI/SetWOStatus.Designer.cs @@ -44,6 +44,7 @@ this.btnOK.TabIndex = 6; this.btnOK.Text = "OK"; this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); // // btnCancel // diff --git a/AyaNovaQBI/SetWOStatus.cs b/AyaNovaQBI/SetWOStatus.cs index 218a5ef..f9a79da 100644 --- a/AyaNovaQBI/SetWOStatus.cs +++ b/AyaNovaQBI/SetWOStatus.cs @@ -17,72 +17,95 @@ namespace AyaNovaQBI InitializeComponent(); } - private long _SelectedStatus = 0; - public long SelectedStatus - { - get - { - return (long)cbStatus.SelectedItem; - } - set - { - _SelectedStatus = value; - } - } + public string DialogTitle { get; set; } - private bool _Pre = true; - /// - /// Used to indicate if dialog should display for post or pre - /// status - /// - public bool PreStatus - { + public string OptionTitle { get; set; } - set - { - _Pre = value; + public string OptionDescription { get; set; } - } - } - private void SetWOStatus_Load(object sender, EventArgs e) + private long _SelectedStatus = 0; + public long SelectedStatus { - List items = util.AyaWOStatusList.OrderBy(z=>z.Name).Select(z => new NameIdItem { Id = z.Id, Name = z.Name }).ToList(); - items.Insert(0, new NameIdItem { Id = 0, Name = _Pre ? "< Any status >" : "< Do not change status >" }); + get + { + return (long)cbStatus.SelectedItem; + } + set + { + _SelectedStatus = value; - this.cbStatus.DataSource = items; - this.cbStatus.DisplayMember = "Name"; - this.cbStatus.ValueMember = "Id"; - this.cbStatus.SelectedValue = _SelectedStatus; + } + } - this.lblStatus.Text = util.AyaTranslations["WorkOrderStatus"]; - ////NVCHANGED - //GenericNVList ls = GenericNVList.GetList("aWorkorderStatus", "aID", "aName", true, false, false); + private bool _Pre = true; + /// + /// Used to indicate if dialog should display for post or pre + /// status + /// + public bool PreStatus + { - //if (_Pre) - // this.cbStatus.SelectedItem = this.cbStatus.Items.Add(Guid.Empty, "< Any status >"); - //else - // this.cbStatus.SelectedItem = this.cbStatus.Items.Add(Guid.Empty, "< Do not change status >"); + set + { + _Pre = value; + + } + } + + private void SetWOStatus_Load(object sender, EventArgs e) + { + this.Text = DialogTitle; + this.lblDescription.Text = OptionDescription; + this.lblTitle.Text = OptionTitle; + this.btnCancel.Text = util.AyaTranslations["Cancel"]; + this.btnOK.Text = util.AyaTranslations["OK"]; + + List items = util.AyaWOStatusList.OrderBy(z => z.Name).Select(z => new NameIdItem { Id = z.Id, Name = z.Name }).ToList(); + items.Insert(0, new NameIdItem { Id = 0, Name = _Pre ? "< Any status >" : "< Do not change status >" }); + + this.cbStatus.DataSource = items; + this.cbStatus.DisplayMember = "Name"; + this.cbStatus.ValueMember = "Id"; + this.cbStatus.SelectedValue = _SelectedStatus; + + this.lblStatus.Text = util.AyaTranslations["WorkOrderStatus"]; - //foreach (DictionaryEntry d in ls.BindableList) - //{ - // Guid gItem = new Guid(d.Key.ToString()); - // Infragistics.Win.ValueListItem v = this.cbStatus.Items.Add(gItem, d.Value.ToString()); - // if (_SelectedStatus == gItem) - // { - // this.cbStatus.SelectedItem = v; + ////NVCHANGED + //GenericNVList ls = GenericNVList.GetList("aWorkorderStatus", "aID", "aName", true, false, false); - // } - //} + //if (_Pre) + // this.cbStatus.SelectedItem = this.cbStatus.Items.Add(Guid.Empty, "< Any status >"); + //else + // this.cbStatus.SelectedItem = this.cbStatus.Items.Add(Guid.Empty, "< Do not change status >"); - } + //foreach (DictionaryEntry d in ls.BindableList) + //{ + // Guid gItem = new Guid(d.Key.ToString()); + // Infragistics.Win.ValueListItem v = this.cbStatus.Items.Add(gItem, d.Value.ToString()); + // if (_SelectedStatus == gItem) + // { + // this.cbStatus.SelectedItem = v; - private void SetWOStatus_FormClosing(object sender, FormClosingEventArgs e) + // } + //} + + + } + + private void SetWOStatus_FormClosing(object sender, FormClosingEventArgs e) { } + + private void btnOK_Click(object sender, EventArgs e) + { + + this.DialogResult = DialogResult.OK; + this.Close(); + } } } diff --git a/AyaNovaQBI/util.cs b/AyaNovaQBI/util.cs index 573b190..417f446 100644 --- a/AyaNovaQBI/util.cs +++ b/AyaNovaQBI/util.cs @@ -740,8 +740,7 @@ namespace AyaNovaQBI #region Validate User settings are completed and valid - //case 3268 - public static string TRANSACTION_CLASS_NO_CLASS_SELECTED = ""; + /// /// Validate the users preferences @@ -867,471 +866,471 @@ namespace AyaNovaQBI POSTSTATUSOK: #endregion - #region Outside service charge as - //Validate any existing status - if (SetEverything == false && QDat.OutsideServiceChargeAs != null && QDat.OutsideServiceChargeAs != "") - { - if (QBItems.Rows.Contains(QDat.OutsideServiceChargeAs)) - goto OUTSIDESERVICECHARGEASOK; - else - { - MessageBox.Show("The QuickBooks Item previously set for invoicing Outside Service items\r\n" + - "No longer appears to be valid. You will next be prompted to re-select a valid \r\n" + - "QuickBooks Item."); - } - } - - - //We've arrived here because there is no valid setting for OutsideServiceChargeAs - SetQBChargeAs s2 = new SetQBChargeAs(); - s2.DialogTitle = "AyaNova QBI setup - Charge outside service as?"; - s2.OptionTitle = "Outside service"; - s2.OptionDescription = "QBI needs to know what QuickBooks Item you want \r\n" + - "to use when invoicing the AyaNova \"Outside service\" portion of a work order.\r\n\r\n" + - "Outside service is any 3rd party repair that is billable to the customer.\r\n\r\n" + - "This setting is mandatory / required."; - s2.QBItems = QBItems; - s2.SelectedQBItem = QDat.OutsideServiceChargeAs; - //s2.SelectedQBItem=QDat.PreWOStatus; - if (s2.ShowDialog() == DialogResult.Cancel) - { - return pfstat.Cancel; - - } - else - QDat.OutsideServiceChargeAs = s2.SelectedQBItem; - s2.Dispose(); - s2 = null; - - OUTSIDESERVICECHARGEASOK: - - #endregion - - #region Misc expense charge as - //Validate any existing - if (SetEverything == false && QDat.MiscExpenseChargeAs != null && QDat.MiscExpenseChargeAs != "") - { - //if(QBItems.Rows.Contains(QDat.MiscExpenseChargeAs)) - goto MISCCHARGEASOK; - // else - // { - // MessageBox.Show("The QuickBooks Item previously set for invoicing Misc. Expense items\r\n" + - // "No longer appears to be valid. You will next be prompted to re-select a valid \r\n" + - // "QuickBooks Item."); - // } - } - - - //We've arrived here because there is no valid setting for Misc expense - s2 = new SetQBChargeAs(); - s2.DialogTitle = "AyaNova QBI setup - Charge Misc. Expense as?"; - s2.OptionTitle = "Miscellaneous expenses"; - s2.OptionDescription = "QBI needs to know what QuickBooks Item you want \r\n" + - "to use when invoicing the AyaNova \"Miscellaneous expense\" portion of a work order.\r\n\r\n" + - "This setting is mandatory / required."; - s2.QBItems = QBItems; - s2.SelectedQBItem = QDat.MiscExpenseChargeAs; - - if (s2.ShowDialog() == DialogResult.Cancel) - { - return pfstat.Cancel; - - } - else - QDat.MiscExpenseChargeAs = s2.SelectedQBItem; - s2.Dispose(); - s2 = null; - - MISCCHARGEASOK: - - #endregion - - #region Workorder item loan charge as - //Validate any existing - if (SetEverything == false && QDat.WorkorderItemLoanChargeAs != null && QDat.WorkorderItemLoanChargeAs != "") - { - //if(QBItems.Rows.Contains(QDat.MiscExpenseChargeAs)) - goto LOANCHARGEASOK; - // else - // { - // MessageBox.Show("The QuickBooks Item previously set for invoicing Misc. Expense items\r\n" + - // "No longer appears to be valid. You will next be prompted to re-select a valid \r\n" + - // "QuickBooks Item."); - // } - } - - - //We've arrived here because there is no valid setting for Misc expense - s2 = new SetQBChargeAs(); - s2.DialogTitle = "AyaNova QBI setup - Charge loan item as?"; - s2.OptionTitle = "Work order loans"; - s2.OptionDescription = "QBI needs to know what QuickBooks Item you want \r\n" + - "to use when invoicing the AyaNova \"Workorder item loan\" portion of a work order.\r\n\r\n" + - "This setting is mandatory / required."; - s2.QBItems = QBItems; - s2.SelectedQBItem = QDat.WorkorderItemLoanChargeAs; - if (s2.ShowDialog() == DialogResult.Cancel) - { - return pfstat.Cancel; - - } - else - QDat.WorkorderItemLoanChargeAs = s2.SelectedQBItem; - s2.Dispose(); - s2 = null; - - LOANCHARGEASOK: - - #endregion - - #region QB Transaction class - //Validate any existing - if (SetEverything == false && QDat.TransactionClass != null && QDat.TransactionClass != "") - { - //if something is set but there are no tr classes - //then just clear it and move along - if (QBClasses.Rows.Count == 1) - { - QDat.TransactionClass = TRANSACTION_CLASS_NO_CLASS_SELECTED;//case 3268 - goto TRCLASSOK; - } - - //Something is set and there *are* tr classes so - //let's validate it... - - if (QBClasses.Rows.Contains(QDat.TransactionClass)) - goto TRCLASSOK; - else - { - MessageBox.Show("The QuickBooks transaction class previously set for invoicing\r\n" + - "no longer appears to be valid. You will next be prompted to re-select it."); - } - } - - //Perhaps there are no transaction classes, this is the default - //if not then don't prompt for it obviously :) - //also if it was empty and were not in first setup mode then - //don't bother prompting it might be the users choice. - - //case 3228 commented out the following as it's a bad idea - //if (QBClasses.Rows.Count == 1 || SetEverything == false) - // goto TRCLASSOK; - - - //We've arrived here because there is no setting for transaction classes - //but there are some defined in QB - SetQBClass s3 = new SetQBClass(); - s3.DialogTitle = "AyaNova QBI setup - Transaction class"; - s3.OptionTitle = "Transaction class"; - s3.OptionDescription = "QBI needs to know what QuickBooks Transaction Class you want \r\n" + - "to use when invoicing Work orders.\r\n\r\n" + - "If you do not use transaction classes or are not sure what they are\r\n" + - "select < Do not use classes> from the list below. Classes are off by default in QuickBooks.\r\n\r\n" + - "This setting is Optional and not required."; - s3.QBClasses = QBClasses; - - if (s3.ShowDialog() == DialogResult.Cancel) - { - return pfstat.Cancel; - - } - else - QDat.TransactionClass = s3.SelectedQBClass; - s3.Dispose(); - s3 = null; - - TRCLASSOK: - - #endregion - - #region QB InvoiceTemplate - //Templates are only supported in xml 3 or greater (all countries) - //if Set everything (first run) then display a dialog about it - if (QVersion < 3 && SetEverything == true) - { - - SetInfoOnly s3a = new SetInfoOnly(); - s3a.DialogTitle = "AyaNova QBI setup - Invoice template"; - s3a.OptionTitle = "Invoice template - NOT SUPPORTED"; - s3a.OptionDescription = - "QBI can use a specific QuickBooks Invoice template for printing work orders.\r\n" + - "However, your version of QuickBooks does not support integrating this \r\n" + - "feature with 3rd party applications such as AyaNova QBI.\r\n" + - - "Supported versions of QuickBooks for using Invoice templates with QBI are:\r\n\r\n" + - "U.S., Canadian or U.K. QuickBooks 2004 or newer\r\n\r\n" + - - "If you upgrade your QuickBooks in future you will be able to select this option\r\n" + - "for now it is disabled and the default invoice template will be used"; - - s3a.ShowDialog(); - - goto TRInvoiceTemplateOK; - } - - //Subsequent, non-setup, runs with unsupported version - if (QVersion < 3) - goto TRInvoiceTemplateOK; - - - //Validate any existing - if (QDat.QBInvoiceTemplate != null && QDat.QBInvoiceTemplate != "") - { - //if something is set but there are no InvoiceTemplates - //then just clear it and move along - if (QBInvoiceTemplates.Rows.Count == 1) - { - QDat.QBInvoiceTemplate = ""; - goto TRInvoiceTemplateOK; - } - - //Something is set and there *are* tr InvoiceTemplates so - //let's validate it... - if (QBInvoiceTemplates.Rows.Contains(QDat.QBInvoiceTemplate)) - { - if (!SetEverything) - goto TRInvoiceTemplateOK; - } - else - { - MessageBox.Show("The QuickBooks Invoice Template previously set for invoicing\r\n" + - "no longer appears to be valid. You will next be prompted to re-select it."); - } - } - - //Perhaps there are no InvoiceTemplates, this is the default - //if not then don't prompt for it obviously :) - //also if it was empty and were not in first setup mode then - //don't bother prompting it might be the users choice. - //todo: make something besides and empty string to indicate - //deliberately non selected items - if (QBInvoiceTemplates.Rows.Count == 1 || SetEverything == false) - goto TRInvoiceTemplateOK; - - - //We've arrived here because there is no setting for InvoiceTemplates - //Or the user want's to change it - //and there are some defined in QB - SetQBInvoiceTemplate s3b = new SetQBInvoiceTemplate(); - s3b.DialogTitle = "AyaNova QBI setup - Invoice template"; - s3b.OptionTitle = "Invoice template"; - s3b.OptionDescription = "QBI needs to know what QuickBooks Invoice template you want \r\n" + - "QBI to set for invoices created from Work orders.\r\n\r\n" + - "QuickBooks Invoice templates are used in QuickBooks to specify different print formats\r\n" + - "for invoices. If you do not use Invoice templates or are not sure what they are\r\n" + - "select < Use default > from the list below.\r\n\r\n" + - "This setting is required."; - s3b.QBInvoiceTemplates = QBInvoiceTemplates; - - s3b.SelectedQBInvoiceTemplate = QDat.QBInvoiceTemplate; - - if (s3b.ShowDialog() == DialogResult.Cancel) - { - return pfstat.Cancel; - - } - else - QDat.QBInvoiceTemplate = s3b.SelectedQBInvoiceTemplate; - s3b.Dispose(); - s3b = null; - - TRInvoiceTemplateOK: - - - #endregion - - #region QB Terms - - - - //Validate any existing - //case 3228 added extra condition set everything is false - if (SetEverything == false && !string.IsNullOrEmpty(QDat.TermsDefault)) - { - //if something is set but there are no terms - //then just clear it and move along - if (QBTerms.Rows.Count == 1) - { - QDat.TermsDefault = ""; - goto TermsOK; - } - - //Something is set and there *are* terms so - //let's validate it... - if (QBTerms.Rows.Contains(QDat.TermsDefault)) - { - if (!SetEverything) - goto TermsOK; - } - else - { - MessageBox.Show("The QuickBooks default terms previously set for invoicing\r\n" + - "no longer appears to be valid. You will next be prompted to re-select it."); - } - } - - - - - //We've arrived here because there is no setting for Terms - //Or the user want's to change it - //and there are some defined in QB - SetQBTerms termsdialog = new SetQBTerms(); - termsdialog.DialogTitle = "AyaNova QBI setup - Customer default invoice terms"; - termsdialog.OptionTitle = "Default terms"; - termsdialog.OptionDescription = "QBI needs to know what QuickBooks terms you want \r\n" + - "QBI to set for customers imported from AyaNova.\r\n\r\n" + - "When an invoice for a customer is created the selected terms will be applied.\r\n\r\n" + - "This setting is required."; - termsdialog.QBTerms = QBTerms; - - termsdialog.SelectedQBTerm = QDat.TermsDefault; - - if (termsdialog.ShowDialog() == DialogResult.Cancel) - { - return pfstat.Cancel; - - } - else - QDat.TermsDefault = termsdialog.SelectedQBTerm; - termsdialog.Dispose(); - termsdialog = null; - - TermsOK: - - - #endregion - - #region ToBePrinted - //No validation possible - //so prompt only if not setup yet - if (!SetEverything) - { - //if(QBItems.Rows.Contains(QDat.MiscExpenseChargeAs)) - goto TBPOK; - // else - // { - // MessageBox.Show("The QuickBooks Item previously set for invoicing Misc. Expense items\r\n" + - // "No longer appears to be valid. You will next be prompted to re-select a valid \r\n" + - // "QuickBooks Item."); - // } - } - - - - + // #region Outside service charge as + // //Validate any existing status + // if (SetEverything == false && QDat.OutsideServiceChargeAs != null && QDat.OutsideServiceChargeAs != "") + // { + // if (QBItems.Rows.Contains(QDat.OutsideServiceChargeAs)) + // goto OUTSIDESERVICECHARGEASOK; + // else + // { + // MessageBox.Show("The QuickBooks Item previously set for invoicing Outside Service items\r\n" + + // "No longer appears to be valid. You will next be prompted to re-select a valid \r\n" + + // "QuickBooks Item."); + // } + // } + + + // //We've arrived here because there is no valid setting for OutsideServiceChargeAs + // SetQBChargeAs s2 = new SetQBChargeAs(); + // s2.DialogTitle = "AyaNova QBI setup - Charge outside service as?"; + // s2.OptionTitle = "Outside service"; + // s2.OptionDescription = "QBI needs to know what QuickBooks Item you want \r\n" + + // "to use when invoicing the AyaNova \"Outside service\" portion of a work order.\r\n\r\n" + + // "Outside service is any 3rd party repair that is billable to the customer.\r\n\r\n" + + // "This setting is mandatory / required."; + // s2.QBItems = QBItems; + // s2.SelectedQBItem = QDat.OutsideServiceChargeAs; + // //s2.SelectedQBItem=QDat.PreWOStatus; + // if (s2.ShowDialog() == DialogResult.Cancel) + // { + // return pfstat.Cancel; + + // } + // else + // QDat.OutsideServiceChargeAs = s2.SelectedQBItem; + // s2.Dispose(); + // s2 = null; + + //OUTSIDESERVICECHARGEASOK: + + // #endregion + + // #region Misc expense charge as + // //Validate any existing + // if (SetEverything == false && QDat.MiscExpenseChargeAs != null && QDat.MiscExpenseChargeAs != "") + // { + // //if(QBItems.Rows.Contains(QDat.MiscExpenseChargeAs)) + // goto MISCCHARGEASOK; + // // else + // // { + // // MessageBox.Show("The QuickBooks Item previously set for invoicing Misc. Expense items\r\n" + + // // "No longer appears to be valid. You will next be prompted to re-select a valid \r\n" + + // // "QuickBooks Item."); + // // } + // } + + + // //We've arrived here because there is no valid setting for Misc expense + // s2 = new SetQBChargeAs(); + // s2.DialogTitle = "AyaNova QBI setup - Charge Misc. Expense as?"; + // s2.OptionTitle = "Miscellaneous expenses"; + // s2.OptionDescription = "QBI needs to know what QuickBooks Item you want \r\n" + + // "to use when invoicing the AyaNova \"Miscellaneous expense\" portion of a work order.\r\n\r\n" + + // "This setting is mandatory / required."; + // s2.QBItems = QBItems; + // s2.SelectedQBItem = QDat.MiscExpenseChargeAs; + + // if (s2.ShowDialog() == DialogResult.Cancel) + // { + // return pfstat.Cancel; + + // } + // else + // QDat.MiscExpenseChargeAs = s2.SelectedQBItem; + // s2.Dispose(); + // s2 = null; + + //MISCCHARGEASOK: + + // #endregion + + // #region Workorder item loan charge as + // //Validate any existing + // if (SetEverything == false && QDat.WorkorderItemLoanChargeAs != null && QDat.WorkorderItemLoanChargeAs != "") + // { + // //if(QBItems.Rows.Contains(QDat.MiscExpenseChargeAs)) + // goto LOANCHARGEASOK; + // // else + // // { + // // MessageBox.Show("The QuickBooks Item previously set for invoicing Misc. Expense items\r\n" + + // // "No longer appears to be valid. You will next be prompted to re-select a valid \r\n" + + // // "QuickBooks Item."); + // // } + // } + + + // //We've arrived here because there is no valid setting for Misc expense + // s2 = new SetQBChargeAs(); + // s2.DialogTitle = "AyaNova QBI setup - Charge loan item as?"; + // s2.OptionTitle = "Work order loans"; + // s2.OptionDescription = "QBI needs to know what QuickBooks Item you want \r\n" + + // "to use when invoicing the AyaNova \"Workorder item loan\" portion of a work order.\r\n\r\n" + + // "This setting is mandatory / required."; + // s2.QBItems = QBItems; + // s2.SelectedQBItem = QDat.WorkorderItemLoanChargeAs; + // if (s2.ShowDialog() == DialogResult.Cancel) + // { + // return pfstat.Cancel; + + // } + // else + // QDat.WorkorderItemLoanChargeAs = s2.SelectedQBItem; + // s2.Dispose(); + // s2 = null; + + //LOANCHARGEASOK: + + // #endregion + + // #region QB Transaction class + // //Validate any existing + // if (SetEverything == false && QDat.TransactionClass != null && QDat.TransactionClass != "") + // { + // //if something is set but there are no tr classes + // //then just clear it and move along + // if (QBClasses.Rows.Count == 1) + // { + // QDat.TransactionClass = TRANSACTION_CLASS_NO_CLASS_SELECTED;//case 3268 + // goto TRCLASSOK; + // } + + // //Something is set and there *are* tr classes so + // //let's validate it... + + // if (QBClasses.Rows.Contains(QDat.TransactionClass)) + // goto TRCLASSOK; + // else + // { + // MessageBox.Show("The QuickBooks transaction class previously set for invoicing\r\n" + + // "no longer appears to be valid. You will next be prompted to re-select it."); + // } + // } + + // //Perhaps there are no transaction classes, this is the default + // //if not then don't prompt for it obviously :) + // //also if it was empty and were not in first setup mode then + // //don't bother prompting it might be the users choice. + + // //case 3228 commented out the following as it's a bad idea + // //if (QBClasses.Rows.Count == 1 || SetEverything == false) + // // goto TRCLASSOK; + + + // //We've arrived here because there is no setting for transaction classes + // //but there are some defined in QB + // SetQBClass s3 = new SetQBClass(); + // s3.DialogTitle = "AyaNova QBI setup - Transaction class"; + // s3.OptionTitle = "Transaction class"; + // s3.OptionDescription = "QBI needs to know what QuickBooks Transaction Class you want \r\n" + + // "to use when invoicing Work orders.\r\n\r\n" + + // "If you do not use transaction classes or are not sure what they are\r\n" + + // "select < Do not use classes> from the list below. Classes are off by default in QuickBooks.\r\n\r\n" + + // "This setting is Optional and not required."; + // s3.QBClasses = QBClasses; + + // if (s3.ShowDialog() == DialogResult.Cancel) + // { + // return pfstat.Cancel; + + // } + // else + // QDat.TransactionClass = s3.SelectedQBClass; + // s3.Dispose(); + // s3 = null; + + //TRCLASSOK: + + // #endregion + + // #region QB InvoiceTemplate + // //Templates are only supported in xml 3 or greater (all countries) + // //if Set everything (first run) then display a dialog about it + // if (QVersion < 3 && SetEverything == true) + // { + + // SetInfoOnly s3a = new SetInfoOnly(); + // s3a.DialogTitle = "AyaNova QBI setup - Invoice template"; + // s3a.OptionTitle = "Invoice template - NOT SUPPORTED"; + // s3a.OptionDescription = + // "QBI can use a specific QuickBooks Invoice template for printing work orders.\r\n" + + // "However, your version of QuickBooks does not support integrating this \r\n" + + // "feature with 3rd party applications such as AyaNova QBI.\r\n" + + + // "Supported versions of QuickBooks for using Invoice templates with QBI are:\r\n\r\n" + + // "U.S., Canadian or U.K. QuickBooks 2004 or newer\r\n\r\n" + + + // "If you upgrade your QuickBooks in future you will be able to select this option\r\n" + + // "for now it is disabled and the default invoice template will be used"; + + // s3a.ShowDialog(); + + // goto TRInvoiceTemplateOK; + // } + + // //Subsequent, non-setup, runs with unsupported version + // if (QVersion < 3) + // goto TRInvoiceTemplateOK; + + + // //Validate any existing + // if (QDat.QBInvoiceTemplate != null && QDat.QBInvoiceTemplate != "") + // { + // //if something is set but there are no InvoiceTemplates + // //then just clear it and move along + // if (QBInvoiceTemplates.Rows.Count == 1) + // { + // QDat.QBInvoiceTemplate = ""; + // goto TRInvoiceTemplateOK; + // } + + // //Something is set and there *are* tr InvoiceTemplates so + // //let's validate it... + // if (QBInvoiceTemplates.Rows.Contains(QDat.QBInvoiceTemplate)) + // { + // if (!SetEverything) + // goto TRInvoiceTemplateOK; + // } + // else + // { + // MessageBox.Show("The QuickBooks Invoice Template previously set for invoicing\r\n" + + // "no longer appears to be valid. You will next be prompted to re-select it."); + // } + // } + + // //Perhaps there are no InvoiceTemplates, this is the default + // //if not then don't prompt for it obviously :) + // //also if it was empty and were not in first setup mode then + // //don't bother prompting it might be the users choice. + // //todo: make something besides and empty string to indicate + // //deliberately non selected items + // if (QBInvoiceTemplates.Rows.Count == 1 || SetEverything == false) + // goto TRInvoiceTemplateOK; + + + // //We've arrived here because there is no setting for InvoiceTemplates + // //Or the user want's to change it + // //and there are some defined in QB + // SetQBInvoiceTemplate s3b = new SetQBInvoiceTemplate(); + // s3b.DialogTitle = "AyaNova QBI setup - Invoice template"; + // s3b.OptionTitle = "Invoice template"; + // s3b.OptionDescription = "QBI needs to know what QuickBooks Invoice template you want \r\n" + + // "QBI to set for invoices created from Work orders.\r\n\r\n" + + // "QuickBooks Invoice templates are used in QuickBooks to specify different print formats\r\n" + + // "for invoices. If you do not use Invoice templates or are not sure what they are\r\n" + + // "select < Use default > from the list below.\r\n\r\n" + + // "This setting is required."; + // s3b.QBInvoiceTemplates = QBInvoiceTemplates; + + // s3b.SelectedQBInvoiceTemplate = QDat.QBInvoiceTemplate; + + // if (s3b.ShowDialog() == DialogResult.Cancel) + // { + // return pfstat.Cancel; + + // } + // else + // QDat.QBInvoiceTemplate = s3b.SelectedQBInvoiceTemplate; + // s3b.Dispose(); + // s3b = null; + + //TRInvoiceTemplateOK: + + + // #endregion + + // #region QB Terms + + + + // //Validate any existing + // //case 3228 added extra condition set everything is false + // if (SetEverything == false && !string.IsNullOrEmpty(QDat.TermsDefault)) + // { + // //if something is set but there are no terms + // //then just clear it and move along + // if (QBTerms.Rows.Count == 1) + // { + // QDat.TermsDefault = ""; + // goto TermsOK; + // } + + // //Something is set and there *are* terms so + // //let's validate it... + // if (QBTerms.Rows.Contains(QDat.TermsDefault)) + // { + // if (!SetEverything) + // goto TermsOK; + // } + // else + // { + // MessageBox.Show("The QuickBooks default terms previously set for invoicing\r\n" + + // "no longer appears to be valid. You will next be prompted to re-select it."); + // } + // } + + + + + // //We've arrived here because there is no setting for Terms + // //Or the user want's to change it + // //and there are some defined in QB + // SetQBTerms termsdialog = new SetQBTerms(); + // termsdialog.DialogTitle = "AyaNova QBI setup - Customer default invoice terms"; + // termsdialog.OptionTitle = "Default terms"; + // termsdialog.OptionDescription = "QBI needs to know what QuickBooks terms you want \r\n" + + // "QBI to set for customers imported from AyaNova.\r\n\r\n" + + // "When an invoice for a customer is created the selected terms will be applied.\r\n\r\n" + + // "This setting is required."; + // termsdialog.QBTerms = QBTerms; + + // termsdialog.SelectedQBTerm = QDat.TermsDefault; + + // if (termsdialog.ShowDialog() == DialogResult.Cancel) + // { + // return pfstat.Cancel; + + // } + // else + // QDat.TermsDefault = termsdialog.SelectedQBTerm; + // termsdialog.Dispose(); + // termsdialog = null; + + //TermsOK: + + + // #endregion + + // #region ToBePrinted + // //No validation possible + // //so prompt only if not setup yet + // if (!SetEverything) + // { + // //if(QBItems.Rows.Contains(QDat.MiscExpenseChargeAs)) + // goto TBPOK; + // // else + // // { + // // MessageBox.Show("The QuickBooks Item previously set for invoicing Misc. Expense items\r\n" + + // // "No longer appears to be valid. You will next be prompted to re-select a valid \r\n" + + // // "QuickBooks Item."); + // // } + // } + + + + - SetToBePrinted s4 = new SetToBePrinted(); - s4.DialogTitle = "AyaNova QBI setup - Set invoice to be printed?"; - s4.OptionTitle = "Invoice to be printed"; - s4.OptionDescription = "QBI needs to know if you want invoices that it creates \r\n" + - "in QuickBooks to be set to \"To be printed\".\r\n\r\n" + - "(Please note that \"To be emailed\" which is available in some\r\n" + - "versions of QuickBooks is not an option at this time as\r\n" + - "QuickBooks has not exposed that property to developers)"; - s4.ToBePrinted = QDat.ToBePrinted; - - if (s4.ShowDialog() == DialogResult.Cancel) - { - return pfstat.Cancel; + // SetToBePrinted s4 = new SetToBePrinted(); + // s4.DialogTitle = "AyaNova QBI setup - Set invoice to be printed?"; + // s4.OptionTitle = "Invoice to be printed"; + // s4.OptionDescription = "QBI needs to know if you want invoices that it creates \r\n" + + // "in QuickBooks to be set to \"To be printed\".\r\n\r\n" + + // "(Please note that \"To be emailed\" which is available in some\r\n" + + // "versions of QuickBooks is not an option at this time as\r\n" + + // "QuickBooks has not exposed that property to developers)"; + // s4.ToBePrinted = QDat.ToBePrinted; + + // if (s4.ShowDialog() == DialogResult.Cancel) + // { + // return pfstat.Cancel; - } - else - QDat.ToBePrinted = s4.ToBePrinted; - s4.Dispose(); - s4 = null; - - TBPOK: - - #endregion - - #region SetMemoField - //No validation possible - //so prompt only if not setup yet - if (!SetEverything) - { - //if(QBItems.Rows.Contains(QDat.MiscExpenseChargeAs)) - goto SETMEMOOK; - // else - // { - // MessageBox.Show("The QuickBooks Item previously set for invoicing Misc. Expense items\r\n" + - // "No longer appears to be valid. You will next be prompted to re-select a valid \r\n" + - // "QuickBooks Item."); - // } - } - - - - - - SetMemoField s5 = new SetMemoField(); - s5.DialogTitle = "AyaNova QBI setup - Set Memo field?"; - s5.OptionTitle = "Invoice memo field"; - s5.OptionDescription = - "QBI needs to know if you want invoices that it creates \r\n" + - "in QuickBooks to have their \"Memo\" field set with\r\n" + - "information about the work order(s) that were the basis for\r\n" + - "the invoice and the name of the AyaNova user who generated them.\r\n\r\n" + - "This may be useful as a back reference, this setting is optional"; - s5.FillMemoField = QDat.SetMemoField; - - if (s5.ShowDialog() == DialogResult.Cancel) - { - return pfstat.Cancel; - - } - else - QDat.SetMemoField = s5.FillMemoField; - s5.Dispose(); - s5 = null; + // } + // else + // QDat.ToBePrinted = s4.ToBePrinted; + // s4.Dispose(); + // s4 = null; + + //TBPOK: + + // #endregion + + // #region SetMemoField + // //No validation possible + // //so prompt only if not setup yet + // if (!SetEverything) + // { + // //if(QBItems.Rows.Contains(QDat.MiscExpenseChargeAs)) + // goto SETMEMOOK; + // // else + // // { + // // MessageBox.Show("The QuickBooks Item previously set for invoicing Misc. Expense items\r\n" + + // // "No longer appears to be valid. You will next be prompted to re-select a valid \r\n" + + // // "QuickBooks Item."); + // // } + // } + + + + + + // SetMemoField s5 = new SetMemoField(); + // s5.DialogTitle = "AyaNova QBI setup - Set Memo field?"; + // s5.OptionTitle = "Invoice memo field"; + // s5.OptionDescription = + // "QBI needs to know if you want invoices that it creates \r\n" + + // "in QuickBooks to have their \"Memo\" field set with\r\n" + + // "information about the work order(s) that were the basis for\r\n" + + // "the invoice and the name of the AyaNova user who generated them.\r\n\r\n" + + // "This may be useful as a back reference, this setting is optional"; + // s5.FillMemoField = QDat.SetMemoField; + + // if (s5.ShowDialog() == DialogResult.Cancel) + // { + // return pfstat.Cancel; + + // } + // else + // QDat.SetMemoField = s5.FillMemoField; + // s5.Dispose(); + // s5 = null; - SETMEMOOK: - - #endregion + //SETMEMOOK: + + // #endregion - #region SetAutoCloseField Case 7 - //No validation possible - //so prompt only if not setup yet - if (!SetEverything) - { - goto SETAUTOCLOSEOK; + // #region SetAutoCloseField Case 7 + // //No validation possible + // //so prompt only if not setup yet + // if (!SetEverything) + // { + // goto SETAUTOCLOSEOK; - } + // } - SetAutoClose s6 = new SetAutoClose(); - s6.DialogTitle = "AyaNova QBI setup - Close when invoiced?"; - s6.OptionTitle = "Close work order after invoicing"; - s6.OptionDescription = - "QBI needs to know if you want work orders that it invoices \r\n" + - "automatically set to closed"; - s6.AutoClose = QDat.AutoClose; - - if (s6.ShowDialog() == DialogResult.Cancel) - { - return pfstat.Cancel; + // SetAutoClose s6 = new SetAutoClose(); + // s6.DialogTitle = "AyaNova QBI setup - Close when invoiced?"; + // s6.OptionTitle = "Close work order after invoicing"; + // s6.OptionDescription = + // "QBI needs to know if you want work orders that it invoices \r\n" + + // "automatically set to closed"; + // s6.AutoClose = QDat.AutoClose; + + // if (s6.ShowDialog() == DialogResult.Cancel) + // { + // return pfstat.Cancel; - } - else - QDat.AutoClose = s6.AutoClose; - s6.Dispose(); - s6 = null; + // } + // else + // QDat.AutoClose = s6.AutoClose; + // s6.Dispose(); + // s6 = null; - SETAUTOCLOSEOK: + //SETAUTOCLOSEOK: - #endregion - - - //Save if changes made - if (QDat.IsDirty) - { - //Case 299 - QBI.AIObject = QDat.XMLData; - //QBI.AIObject=QDat; - - QBI = (Integration)QBI.Save(); - QDat.IsDirty = false; - } + // #endregion + + + // //Save if changes made + // if (QDat.IsDirty) + // { + // //Case 299 + // QBI.AIObject = QDat.XMLData; + // //QBI.AIObject=QDat; + + // QBI = (Integration)QBI.Save(); + // QDat.IsDirty = false; + // } return pfstat.OK; } @@ -3139,6 +3138,9 @@ namespace AyaNovaQBI w.Show(); w.Ops = "Reading from AyaNova..."; + w.Step = "Translation text"; + await PopulateAyaTranslationList(); + w.Step = "Clients"; await PopulateAyaClientList(); @@ -3155,6 +3157,8 @@ namespace AyaNovaQBI w.Step = "WorkOrder status list"; await PopulateAyaWOStatusList(); + + w.Close(); } @@ -3282,7 +3286,7 @@ namespace AyaNovaQBI public static async Task PopulateAyaWOStatusList() { var a = await GetAsync("work-order-status/list"); - _woStatuslist = a.ObjectResponse["data"].ToObject>(); + _woStatuslist = a.ObjectResponse["data"]["all"].ToObject>(); } #endregion ayanova WorkOrder STATUS list @@ -3305,9 +3309,12 @@ namespace AyaNovaQBI { var a = await PostAsync("translation/subset", Newtonsoft.Json.JsonConvert.SerializeObject(new List { - "WorkOrderStatus", "xxxxx" + "WorkOrderStatus","OK", "Cancel" })); - _translist = a.ObjectResponse["data"].ToObject>(); + //this weirdness is required because it comes from the server as a json collection of objects with {Key:"blahkey", value:"blahvalue"} rather than what newtonsoft expects for a dictionary which is [{key:"blahvalue"},{key:"blahvalue2"}] + var v = a.ObjectResponse["data"].ToObject>>(); + _translist = v.ToDictionary((keyItem) => keyItem.Key, (valueItem) => valueItem.Value); + } //await window.$gz.api.upsert("translation/subset", needIt);