private void PrintOffer(DebtorOfferClient dbOrder)
        {
            InvoiceAPI Invapi         = new InvoiceAPI(api);
            var        debtor         = dbOrder.Debtor;
            bool       showSendByMail = true;
            string     debtorName;

            if (debtor != null)
            {
                debtorName     = debtor._Name ?? dbOrder._DCAccount;
                showSendByMail = !string.IsNullOrEmpty(debtor.InvoiceEmail);
            }
            else if (dbOrder._Prospect == 0)
            {
                UtilDisplay.ShowErrorCode(ErrorCodes.AccountIsMissing);
                return;
            }
            else
            {
                debtorName     = Uniconta.ClientTools.Localization.lookup("Prospect");
                showSendByMail = true;
            }

            CWGenerateInvoice GenrateOfferDialog = new CWGenerateInvoice(false, Uniconta.ClientTools.Localization.lookup("Offer"), askForEmail: true, showNoEmailMsg: !showSendByMail, debtorName: debtorName, isDebtorOrder: true);

#if !SILVERLIGHT
            GenrateOfferDialog.DialogTableId = 2000000006;
#endif
            GenrateOfferDialog.Closed += async delegate
            {
                if (GenrateOfferDialog.DialogResult == true)
                {
                    var showOrPrintOffer     = GenrateOfferDialog.InvoiceQuickPrint || GenrateOfferDialog.ShowInvoice;
                    var invoicePostingResult = new InvoicePostingPrintGenerator(api, this, dbOrder, null, GenrateOfferDialog.GenrateDate, 0, true, CompanyLayoutType.Offer, showOrPrintOffer, GenrateOfferDialog.InvoiceQuickPrint,
                                                                                GenrateOfferDialog.NumberOfPages, GenrateOfferDialog.SendByEmail, GenrateOfferDialog.Emails, GenrateOfferDialog.sendOnlyToThisEmail, false, GenrateOfferDialog.PostOnlyDelivered, null);

                    busyIndicator.BusyContent = Uniconta.ClientTools.Localization.lookup("GeneratingPage");
                    busyIndicator.IsBusy      = true;
                    var result = await invoicePostingResult.Execute();

                    busyIndicator.IsBusy = false;

                    if (!result)
                    {
                        Utility.ShowJournalError(invoicePostingResult.PostingResult.ledgerRes, dgDebtorOffers);
                    }
                }
            };
            GenrateOfferDialog.Show();
        }
        void ConvertOfferToOrder(DebtorOfferClient offerclient)
        {
            CwOffertoOrder cwOfferToOrder = new CwOffertoOrder();

#if !SILVERLIGHT
            cwOfferToOrder.DialogTableId = 2000000044;
#endif
            cwOfferToOrder.Closed += async delegate
            {
                if (cwOfferToOrder.DialogResult == true)
                {
                    var        odrApi = new OrderAPI(api);
                    ErrorCodes res    = await odrApi.ConvertOfferToOrder(offerclient, cwOfferToOrder.KeepOffer);

                    if (res == ErrorCodes.Succes)
                    {
                        InitQuery();
                    }
                    UtilDisplay.ShowErrorCode(res);
                }
            };
            cwOfferToOrder.Show();
        }
        void InitPage(CrudAPI crudapi, UnicontaBaseEntity master)
        {
            RemoveMenuItem();
            dAddress.Header          = Uniconta.ClientTools.Localization.lookup("DeliveryAddr");
            layoutControl            = layoutItems;
            Employeelookupeditor.api = leAccount.api = lePayment.api = cmbDim1.api = cmbDim2.api = cmbDim3.api = cmbDim4.api = cmbDim5.api = leLayoutGroup.api = leInvoiceAccount.api = PriceListlookupeditior.api =
                leGroup.api          = leShipment.api = leDeliveryTerm.api = Projectlookupeditor.api = PrCategorylookupeditor.api = leDeliveryAddress.api = leVat.api = prTasklookupeditor.api = lePrWorkSpace.api = crudapi;

#if SILVERLIGHT
            leRelatedOrder.api = crudapi;
#else
            leRelatedOrder.CrudApi = crudapi;
#endif
            cbDeliveryCountry.ItemsSource = Enum.GetValues(typeof(Uniconta.Common.CountryCode));
            AdjustLayout();
            if (editrow == null)
            {
                frmRibbon.DisableButtons("Delete");
                liCreatedTime.Visibility = Visibility.Collapsed;
                editrow          = CreateNew() as DebtorOfferClient;
                editrow._Created = DateTime.MinValue;
                if (Debtor != null)
                {
                    editrow.SetMaster(Debtor);
                    if (editrow.RowId == 0)
                    {
                        SetValuesFromMaster(Debtor);
                    }
                    leAccount.IsEnabled = txtName.IsEnabled = false;
                }
                if (Contact != null)
                {
                    editrow.SetMaster(Contact);
                    editrow.ContactName      = Contact.Name;
                    cmbContactName.IsEnabled = false;
                }
                editrow.SetMaster(master); // cound be prospect or project
            }
            else
            {
                BindContact(editrow.Debtor);
            }

            if (Prospect != null)
            {
                BindContact(Prospect);
            }
            if (Contact != null)
            {
                BindContact(Contact.Prospect);
            }

            layoutItems.DataContext  = editrow;
            frmRibbon.OnItemClicked += frmRibbon_OnItemClicked;

            AcItem.ButtonClicked += AcItem_ButtonClicked;

#if !SILVERLIGHT
            editrow.PropertyChanged += Editrow_PropertyChanged;
#endif
            this.master = master;
            if (Prospect != null || Contact != null)
            {
                leAccount.IsEnabled = false;
                AcItem.IsEnabled    = false;
                txtName.IsEnabled   = false;
                txtName.Text        = editrow.Name;
            }

            if (master == null)
            {
                if (crudapi.CompanyEntity.CRM)
                {
                    LoadType(new Type[] { typeof(Uniconta.DataModel.Debtor), typeof(Uniconta.DataModel.CrmProspect) });
                }
                else
                {
                    LoadType(typeof(Uniconta.DataModel.Debtor));
                }
            }
            StartLoadCache();
        }
        async Task CreateOfferLinesFromInvoice(DebtorOfferClient order, DebtorInvoiceClient invoice, bool checkIfCreditNote)
        {
            var offerlines = new List <DebtorOfferLineClient>();

            order.OfferLines = offerlines;
            var invoiceLines = await api.Query <DebtorInvoiceLines>(invoice);

            if (invoiceLines == null || invoiceLines.Length == 0)
            {
                return;
            }

            Array.Sort(invoiceLines, new InvLineSort());

            offerlines.Capacity = invoiceLines.Length;
            int    lineNo = 0;
            double sign   = checkIfCreditNote ? -1d : 1d;

            foreach (var invoiceline in invoiceLines)
            {
                var line = new DebtorOfferLineClient();
                line.SetMaster(order);

                line._LineNumber  = ++lineNo;
                line._Item        = invoiceline._Item;
                line._DiscountPct = invoiceline._DiscountPct;
                line._Discount    = invoiceline._Discount;
                line._Qty         = invoiceline.InvoiceQty * sign;
                line._Price       = (invoiceline.CurrencyEnum != null ? invoiceline._PriceCur : invoiceline._Price);
                if (line._Price != 0)
                {
                    line._Price += invoiceline._PriceVatPart;
                }

                if (line._Qty * line._Price == 0)
                {
                    line._AmountEntered = ((invoiceline.CurrencyEnum != null ? invoiceline._AmountCur : invoiceline._Amount) + invoiceline._PriceVatPart) * sign;
                }
                line._Dim1      = invoiceline._Dim1;
                line._Dim2      = invoiceline._Dim2;
                line._Dim3      = invoiceline._Dim3;
                line._Dim4      = invoiceline._Dim4;
                line._Dim5      = invoiceline._Dim5;
                line._Employee  = invoiceline._Employee;
                line._Note      = invoiceline._Note;
                line._Text      = invoiceline._Text;
                line._Unit      = invoiceline._Unit;
                line._Variant1  = invoiceline._Variant1;
                line._Variant2  = invoiceline._Variant2;
                line._Variant3  = invoiceline._Variant3;
                line._Variant4  = invoiceline._Variant4;
                line._Variant5  = invoiceline._Variant5;
                line._Warehouse = invoiceline._Warehouse;
                line._Location  = invoiceline._Location;
                var selectedItem = (InvItem)items?.Get(invoiceline._Item);
                if (selectedItem != null)
                {
                    line._Item          = selectedItem._Item;
                    line._CostPriceLine = selectedItem._CostPrice;
                    if (selectedItem._Unit != 0)
                    {
                        line._Unit = selectedItem._Unit;
                    }
                }

                offerlines.Add(line);
            }
            dcOrderlineGrid.ItemsSource = debtorOfferLines = null;
            dcOrderlineGrid.ItemsSource = debtorOfferLines = offerlines;
            dcOrderlineGrid.Visibility  = Visibility.Visible;
        }
        void InitPage(CrudAPI crudapi, UnicontaBaseEntity master)
        {
            RemoveMenuItem();
            BusyIndicator                 = busyIndicator;
            dAddress.Header               = Uniconta.ClientTools.Localization.lookup("DeliveryAddr");
            layoutControl                 = layoutItems;
            Employeelookupeditor.api      = leAccount.api = lePayment.api = cmbDim1.api = cmbDim2.api = cmbDim3.api = cmbDim4.api = cmbDim5.api = leLayoutGroup.api = leInvoiceAccount.api = PriceListlookupeditior.api =
                leGroup.api               = leShipment.api = leDeliveryTerm.api = Projectlookupeditor.api = PrCategorylookupeditor.api = leDeliveryAddress.api = crudapi;
            cbDeliveryCountry.ItemsSource = Enum.GetValues(typeof(Uniconta.Common.CountryCode));
            AdjustLayout();
            if (editrow == null)
            {
                frmRibbon.DisableButtons("Delete");
                editrow = CreateNew() as DebtorOfferClient;
                liCreatedTime.Visibility = Visibility.Collapsed;
                if (master != null)
                {
                    editrow.SetMaster(master);
                    if (editrow.RowId == 0)
                    {
                        SetValuesFromMaster(master as Debtor);
                    }
                    leAccount.IsEnabled = txtName.IsEnabled = false;
                }
            }
            else
            {
                BindContact(editrow.Debtor);
            }

            layoutItems.DataContext  = editrow;
            frmRibbon.OnItemClicked += frmRibbon_OnItemClicked;

            AcItem.ButtonClicked += AcItem_ButtonClicked;

#if !SILVERLIGHT
            txtDelZipCode.EditValueChanged += TxtDelZipCode_EditValueChanged;
#endif

            this.master = master;
            if (master is CrmProspectClient)
            {
                leAccount.IsEnabled = false;
                AcItem.IsEnabled    = false;
                txtName.IsEnabled   = false;
                txtName.Text        = editrow.Name;
            }

            if (master == null)
            {
                if (crudapi.CompanyEntity.CRM)
                {
                    LoadType(new Type[] { typeof(Uniconta.DataModel.Debtor), typeof(Uniconta.DataModel.CrmProspect) });
                }
                else
                {
                    LoadType(typeof(Uniconta.DataModel.Debtor));
                }
            }
            StartLoadCache();
        }
 /// <summary>
 /// Initialization of DebtorOfferPrintReport
 /// </summary>
 /// <param name="debtOffer"></param>
 /// <param name="api"></param>
 public DebtorOfferPrintReport(DebtorOfferClient debtOffer, CrudAPI api)
 {
     debtorOffer = debtOffer;
     Debtor      = debtOffer.Debtor;
     crudApi     = api;
 }