protected override void DeleteGridRow(bool keepRowPos, bool logChange = true)
        {
            if (!grid.EditedCell.IsValid)
            {
                return;
            }

            int           col    = grid.EditedCell.Column;
            int           row    = grid.EditedCell.Row;
            ComplexRecipe recipe = operation.DetailsMat [row].SourceRecipe;

            if (recipe != null)
            {
                using (MessageYesNoRemember message = new MessageYesNoRemember(
                           Translator.GetString("Remove recipe"), null,
                           Translator.GetString("This material is part of a recipe. Do you want to delete the entire recipe?"), "Icons.Question32.png")) {
                    message.Buttons = MessageButtons.YesNo;
                    if (message.Run() != ResponseType.Yes)
                    {
                        return;
                    }
                }

                for (int i = operation.DetailsProd.Count - 1; i >= 0; i--)
                {
                    if (!ReferenceEquals(recipe, operation.DetailsProd [i].SourceRecipe))
                    {
                        continue;
                    }
                    operation.DetailsProd.RemoveAt(i);
                }

                for (int i = operation.DetailsMat.Count - 1; i >= 0; i--)
                {
                    if (!ReferenceEquals(recipe, operation.DetailsMat [i].SourceRecipe))
                    {
                        continue;
                    }
                    DeleteGridRow(keepRowPos, col, i);
                }
            }
            else
            {
                DeleteGridRow(keepRowPos, col, row);
            }
        }
Beispiel #2
0
        public override void OnOperationSave(bool askForConfirmation)
        {
            bool printReceipt = false;

            if (!OperationValidate())
            {
                return;
            }

            if (!OperationDetailsValidate(true))
            {
                return;
            }

            if (askForConfirmation)
            {
                MessageOkCancel dialogSave;
                if (editMode)
                {
                    dialogSave = new MessageOkCancel(
                        Translator.GetString("Edit waste"), string.Empty,
                        Translator.GetString("Do you want to save the changes?"), "Icons.Question32.png");
                }
                else
                {
                    dialogSave = new MessageOkCancel(
                        Translator.GetString("Saving waste"), string.Empty,
                        Translator.GetString("Do you want to save the operation?"), "Icons.Question32.png");
                }

                if (dialogSave.Run() != ResponseType.Ok)
                {
                    operation.AddNewDetail();
                    EditGridField(operation.Details.Count - 1, colItem.Index);
                    return;
                }
            }

            if (BusinessDomain.AppConfiguration.IsPrintingAvailable())
            {
                if (BusinessDomain.AppConfiguration.AskBeforeDocumentPrint == AskDialogState.NotSaved)
                {
                    using (MessageYesNoRemember dialogPrint = new MessageYesNoRemember(
                               Translator.GetString("Print document"), string.Empty,
                               Translator.GetString("Do you want to print a document?"), "Icons.Question32.png")) {
                        ResponseType resp = dialogPrint.Run();
                        if (resp == ResponseType.Yes)
                        {
                            printReceipt = true;
                        }

                        if (dialogPrint.RememberChoice)
                        {
                            BusinessDomain.AppConfiguration.AskBeforeDocumentPrint = resp == ResponseType.Yes ? AskDialogState.Yes : AskDialogState.No;
                        }
                    }
                }
                else if (BusinessDomain.AppConfiguration.AskBeforeDocumentPrint == AskDialogState.Yes)
                {
                    printReceipt = true;
                }
            }

            try {
                PrepareOpertionForSaving();
                CommitOperation();
            } catch (InsufficientItemAvailabilityException ex) {
                MessageError.ShowDialog(string.Format(Translator.GetString("The waste cannot be saved due to insufficient quantity of item \"{0}\"."), ex.ItemName),
                                        ErrorSeverity.Warning, ex);
                EditGridField(ex.ItemName);
                return;
            } catch (Exception ex) {
                MessageError.ShowDialog(
                    Translator.GetString("An error occurred while saving the waste operation!"),
                    ErrorSeverity.Error, ex);
                return;
            }

            if (printReceipt && WaitForPendingOperationCompletion())
            {
                try {
                    WasteProtocol protocol = new WasteProtocol(operation);
                    FormHelper.PrintPreviewObject(protocol);
                } catch (Exception ex) {
                    MessageError.ShowDialog(
                        Translator.GetString("An error occurred while generating the protocol!"),
                        ErrorSeverity.Error, ex);
                }
            }

            OnOperationSaved();

            if (editMode)
            {
                OnPageClose();
            }
            else
            {
                ReInitializeForm(null);
            }
        }
        public override void OnOperationSave(bool askForConfirmation)
        {
            #region Prepare the purchase object

            if (!OperationValidate())
            {
                return;
            }

            if (!OperationDetailsValidate(true))
            {
                return;
            }

            #endregion

            if (!TryApplyRules())
            {
                return;
            }

            bool printPayment;
            using (EditNewPayment dialogFinalize = new EditNewPayment(operation)) {
                if (dialogFinalize.Run() != ResponseType.Ok)
                {
                    ClearDetailsFromPriceRules(true);
                    return;
                }
                printPayment = dialogFinalize.PrintDocument;
            }

            if (!PriceRule.ApplyOnPaymentSet(operation))
            {
                return;
            }

            try {
                var newPayments = GetAllNewPayments(printPayment);
                PrepareOpertionForSaving();
                CommitOperation();
                PrintAllNewPayments(newPayments);
            } catch (InsufficientItemAvailabilityException ex) {
                MessageError.ShowDialog(string.Format(Translator.GetString("The purchase cannot be saved due to insufficient quantities of item \"{0}\"."), ex.ItemName),
                                        ErrorSeverity.Warning, ex);
                ClearDetailsFromPriceRules();
                EditGridField(ex.ItemName);
                return;
            } catch (Exception ex) {
                MessageError.ShowDialog(Translator.GetString("An error occurred while saving purchase document!"),
                                        ErrorSeverity.Error, ex);
                ClearDetailsFromPriceRules(true);
                return;
            }

            ApplyFinalPriceRules();

            if (BusinessDomain.AppConfiguration.AutoCreateInvoiceOnPurchase && !editMode &&
                WaitForPendingOperationCompletion())
            {
                using (EditNewInvoice dlgInvoice = new EditNewInvoice(operation))
                    dlgInvoice.Run();
            }

            #region Ask to print a document

            bool printReceipt = false;

            if (BusinessDomain.AppConfiguration.IsPrintingAvailable() && BusinessDomain.WorkflowManager.AllowPurchaseReceiptPrint(operation, false))
            {
                if (BusinessDomain.AppConfiguration.AskBeforeDocumentPrint == AskDialogState.NotSaved)
                {
                    using (MessageYesNoRemember dialogPrint = new MessageYesNoRemember(
                               Translator.GetString("Print document"), string.Empty,
                               Translator.GetString("Do you want to print a stock receipt?"), "Icons.Question32.png")) {
                        ResponseType resp = dialogPrint.Run();
                        if (resp == ResponseType.Yes)
                        {
                            printReceipt = true;
                        }

                        if (dialogPrint.RememberChoice)
                        {
                            BusinessDomain.AppConfiguration.AskBeforeDocumentPrint = resp == ResponseType.Yes ? AskDialogState.Yes : AskDialogState.No;
                        }
                    }
                }
                else if (BusinessDomain.AppConfiguration.AskBeforeDocumentPrint == AskDialogState.Yes)
                {
                    printReceipt = true;
                }
            }

            if (printReceipt && WaitForPendingOperationCompletion())
            {
                try {
                    PurchaseReceipt receipt = new PurchaseReceipt(operation);
                    FormHelper.PrintPreviewObject(receipt);
                } catch (Exception ex) {
                    MessageError.ShowDialog(
                        Translator.GetString("An error occurred while generating stock receipt!"),
                        ErrorSeverity.Error, ex);
                }
            }

            #endregion

            OnOperationSaved();

            if (editMode)
            {
                OnPageClose();
            }
            else
            {
                ReInitializeForm(null);
            }
        }