public ActionResult Edit(string id)
        {
            ReceiptViewModel model = ReceiptHelper.GetReceipt(id);

            if (model.CustomerSites == null)
            {
                model.CustomerSites = CustomerHelper.GetCustomerSites(model.CustomerId).Select(a => new SelectListItem
                {
                    Text  = a.SiteName.ToString(),
                    Value = a.Id.ToString()
                }).ToList();
            }

            if (model.Banks == null)
            {
                model.Banks = BankHelper.GetBankList(model.SOBId);
            }

            if (model.BankAccounts == null)
            {
                model.BankAccounts = BankHelper.GetBankAccountList(model.BankId);
            }

            SessionHelper.Calendar       = CalendarHelper.GetCalendar(model.PeriodId.ToString());
            SessionHelper.PrecisionLimit = CurrencyHelper.GetCurrency(model.CurrencyId.ToString()).Precision;
            return(View("Create", model));
        }
        public void ProcessReceiptTest()
        {
            // Arrange
            var byteList = new List <byte>();

            byteList.Add(Convert.ToByte(22));
            var receiptSegments = new List <List <ReceiptSegmentType> >();
            var segmentList     = new List <ReceiptSegmentType>
            {
                new ReceiptSegmentType {
                    MimeData = byteList, Sequence = -1
                }
            };

            receiptSegments.Add(segmentList);
            var mimeType = "application/pdf";
            var mockReceiptIntegration = new Mock <IReceiptIntegration>();

            mockReceiptIntegration.Setup(x => x.MergePdf(It.IsAny <List <byte[]> >())).Returns(() => new byte[1]);

            // Act
            var result = ReceiptHelper.ProcessReceipt(receiptSegments, mimeType, mockReceiptIntegration.Object);

            // Assert
            Assert.IsTrue(result.Any());
        }
Example #3
0
        /// <summary>
        /// Generates the receipt.
        /// </summary>
        /// <param name="rockContext">The rock context.</param>
        /// <returns></returns>
        protected InteractionComponent GenerateReceipt(RockContext rockContext)
        {
            var interactionService = new InteractionService(rockContext);
            var receipt            = new InteractionComponent();

            new InteractionComponentService(rockContext).Add(receipt);

            receipt.ChannelId        = InteractionChannelCache.Get(com.shepherdchurch.CubeDown.SystemGuid.InteractionChannel.CUBE_DOWN_RECEIPTS.AsGuid()).Id;
            receipt.Name             = "Temporary Receipt";
            receipt.ComponentSummary = string.Format("Total {0:c}", Cart.Total);

            if (Customer != null)
            {
                receipt.EntityId = Customer.PrimaryAliasId;
            }

            foreach (var item in Cart.Items)
            {
                var interaction = new Interaction
                {
                    EntityId            = null,
                    Operation           = "Buy",
                    InteractionDateTime = RockDateTime.Now,
                    InteractionData     = item.ToJson()
                };

                if (item.Quantity == 1)
                {
                    interaction.InteractionSummary = item.Name;
                }
                else
                {
                    interaction.InteractionSummary = string.Format("{0} (qty {1})", item.Name, item.Quantity);
                }

                interactionService.Add(interaction);
            }

            rockContext.SaveChanges();

            receipt = new InteractionComponentService(rockContext).Get(receipt.Id);

            var receiptCode = ReceiptHelper.EncodeReceiptCode(receipt);

            Cart.ReceiptCode = receiptCode;

            receipt.Name          = string.Format("Receipt #{0}", receiptCode);
            receipt.ComponentData = Cart.ToJson();

            rockContext.SaveChanges();


            return(receipt);
        }
 public ActionResult Delete(string id)
 {
     try
     {
         ReceiptHelper.DeleteReceipt(id);
         return(RedirectToAction("Index"));
     }
     catch (Exception ex)
     {
         return(RedirectToAction("Index", new { message = ex.Message }));
     }
 }
        public List <DatColStockModel> MapToDatCol(Int32 vendorId, List <Model.WehkampStockMutation> mutations)
        {
            using (var pDb = new PetaPoco.Database(Environments.Current.Connection, "System.Data.SqlClient"))
            {
                int connectorID = pDb.FirstOrDefault <int>(@"select connectorid from contentproduct where vendorid = @0 and isassortment = 1", vendorId);

                int    shopNumber           = ConnectorHelper.GetStoreNumber(connectorID);
                int    differenteShopNumber = VendorHelper.GetDifferenceShopNumber(vendorId);
                string employeeNumber       = VendorHelper.GetEmployeeNumber(vendorId);
                var    salesSlipNumber      = ReceiptHelper.GetSlipNumber(vendorId);

                int _receiptIndex       = GenericSlipNumberHelper.GetSlipNumberForTransfer(vendorId, ReceiptHelper.STOCK_SALESSLIP_RECEIPT_NUMBER_SETTING_KEY);
                int _receiptIndexSurplu = GenericSlipNumberHelper.GetSlipNumberForTransfer(vendorId, ReceiptHelper.STOCK_SALESSLIP_RECEIPT_NUMBER_SETTING_KEY_SURPLUS);
                mutations.ForEach(mutation =>
                {
                    _index += 200;

                    var line = new DatColStockModel
                    {
                        StoreNumber                    = (mutation.MutationQuantity > 0 ? differenteShopNumber : shopNumber).ToString("D3") + " 01",
                        EmployeeNumber                 = employeeNumber,
                        ReceiptNumber                  = salesSlipNumber,
                        TransactionType                = "20",
                        DateNotified                   = mutation.MutationDate.ToString("yyyyMMddHHmm"),
                        RecordType                     = "01",
                        SubType                        = "00",
                        NumberOfSkus                   = Math.Abs(mutation.MutationQuantity),
                        MancoOrSurplus                 = mutation.MutationQuantity > 0 ? shopNumber : differenteShopNumber,
                        FixedField1                    = "000000000+",
                        RecordSequence                 = _index,
                        FixedField2                    = "000",
                        FixedField3                    = "000000000+",
                        FixedField4                    = "000",
                        FixedField5                    = "000000000+",
                        FixedField6                    = "000",
                        OriginalSellingPrice           = (int)Math.Round(PriceHelper.GetPrice(mutation.ProductID, vendorId) * 100),
                        FixedField7                    = "00",
                        ArticleNumberColorCodeSizeCode = ProductHelper.GetPFAItemNumber(mutation.Articlenumber, mutation.Colorcode, mutation.ProductID),
                        Barcode                        = BarcodeHelper.GetBarcode(mutation.ProductID),
                        Receipt                        = string.Format("{0}{1}{2}", 0, mutation.MutationQuantity > 0 ? differenteShopNumber.ToString("D3") : shopNumber.ToString(), _receiptIndex.ToString().PadLeft(4, '0')),
                        TaxCode                        = "1",
                        EmployeeNumber2                = employeeNumber,
                        ScannedWithBarcodeReader       = 0
                    };

                    _list.Add(line);
                });
                ReceiptHelper.IncrementSalesSlipNumber(ref salesSlipNumber, vendorId, ReceiptHelper.STOCK_SALESSLIP_NUMBER_SETTINGKEY);

                return(_list);
            }
        }
Example #6
0
        public AcApiResponse <CompleteSessionResponse, ReceiptsApiData> CompleteSession(CompleteSessionRequest req)
        {
            var resp = agentConnectIntegration.CompleteSession(req);

            var additionalData = ReceiptHelper.GenerateAdditionalDataReceipts(resp.Payload?.Receipts, receiptIntegration);

            var apiResp = new AcApiResponse <CompleteSessionResponse, ReceiptsApiData>
            {
                BusinessMetadata = MapperHelper.SetResponseProperties(resp.Payload?.Flags, DataSource.AgentConnect),
                ResponseData     = resp,
                AdditionalData   = additionalData
            };

            return(apiResp);
        }
Example #7
0
        public AcApiResponse <BPValidationResponse, ReceiptsApiData> BPValidation(BPValidationRequest req)
        {
            var resp = agentConnectIntegration.BPValidation(req);

            // Process Receipt
            var additionalData = ReceiptHelper.GenerateAdditionalDataReceipts(resp.Payload?.Receipts, receiptIntegration);

            // Return Response View Model
            var apiResp = new AcApiResponse <BPValidationResponse, ReceiptsApiData>
            {
                BusinessMetadata = MapperHelper.SetResponseProperties(resp.Payload?.Flags, DataSource.AgentConnect),
                ResponseData     = resp,
                AdditionalData   = additionalData
            };

            return(apiResp);
        }
        public AcApiResponse <ReceiveValidationResponse, ReceiptsApiData> ReceiveValidation(ReceiveValidationRequest req)
        {
            // AgentConnect Validate call for RECV
            var resp = _agentConnectIntegration.ReceiveValidation(req);

            var additionalData = ReceiptHelper.GenerateAdditionalDataReceipts(resp.Payload?.Receipts, _receiptIntegration);

            // Map: Response Domain->Response View Model
            var apiResp = new AcApiResponse <ReceiveValidationResponse, ReceiptsApiData>
            {
                BusinessMetadata = MapperHelper.SetResponseProperties(resp.Payload?.Flags, DataSource.AgentConnect),
                ResponseData     = resp,
                AdditionalData   = additionalData
            };

            return(apiResp);
        }
        public void ProcessTextReceiptTest()
        {
            // Arrange
            var receiptData    = new List <byte[]>();
            var unitTestString = "Test receipt data string";
            // Convert to base64
            var base64EncodedString = Convert.ToBase64String(Encoding.UTF8.GetBytes(unitTestString));
            // Convert base64 string to byte array
            var base64ByteArray = Encoding.UTF8.GetBytes(base64EncodedString);

            receiptData.Add(base64ByteArray);

            // Act
            var result             = ReceiptHelper.ProcessTextReceipt(receiptData, "UTF-8");
            var base64EncodedBytes = Convert.FromBase64String(result);
            var plainText          = Encoding.UTF8.GetString(base64EncodedBytes);

            // Assert
            Assert.AreEqual(unitTestString, plainText);
        }
Example #10
0
        public AcApiResponse <SendValidationResponse, ReceiptsApiData> SendValidation(SendValidationRequest req)
        {
            //Create request business object for agent connect service call
            req.PrimaryReceiptLanguage   = AuthIntegration.GetAgentPrimaryReceiptLanguage();
            req.SecondaryReceiptLanguage = AuthIntegration.GetAgentSecondaryReceiptLanguage();

            // AgentConnect sendValidation call for SEND
            var resp = _agentConnectIntegration.SendValidation(req);

            // Process Receipt
            var additionalData = ReceiptHelper.GenerateAdditionalDataReceipts(resp.Payload?.Receipts, _receiptIntegration);

            // Return Response View Model
            var apiResp = new AcApiResponse <SendValidationResponse, ReceiptsApiData>
            {
                BusinessMetadata = MapperHelper.SetResponseProperties(resp.Payload?.Flags, DataSource.AgentConnect),
                ResponseData     = resp,
                AdditionalData   = additionalData
            };

            return(apiResp);
        }
        public ActionResult Create(ReceiptViewModel model)
        {
            if (ModelState.IsValid)
            {
                bool   validated = false;
                string result    = "";
                model.PeriodId  = SessionHelper.Calendar.Id;
                model.CompanyId = AuthenticationHelper.CompanyId.Value;
                //Validation..

                if (model.ReceiptDate >= SessionHelper.Calendar.StartDate && model.ReceiptDate <= SessionHelper.Calendar.EndDate)
                {
                    validated = true;
                }

                if (validated)
                {
                    result = ReceiptHelper.SaveReceipt(model);
                }

                return(RedirectToAction("Index"));
            }
            return(View(model));
        }
        private static ReceiptsApiData GenerateAdditionalDataPrecompletionTest(string mimeType)
        {
            var byteList = new List <byte>
            {
                Convert.ToByte(22)
            };
            var segmentList = new List <ReceiptSegmentType> {
                new ReceiptSegmentType {
                    MimeData = byteList, Sequence = -1
                }
            };

            var preCompletionReceiptType = new PreCompletionReceiptType
            {
                ReceiptMimeType     = mimeType,
                Disclosure1MimeData = segmentList,
                Disclosure2MimeData = segmentList
            };
            var mockReceiptIntegration = new Mock <IReceiptIntegration>();

            mockReceiptIntegration.Setup(x => x.MergePdf(It.IsAny <List <byte[]> >())).Returns(() => new byte[1]);

            return(ReceiptHelper.GenerateAdditionalDataReceipts(preCompletionReceiptType, mockReceiptIntegration.Object));
        }
Example #13
0
        public string GetReceipt()
        {
            var shoppingCart = _undoRedoStack.GetCart();

            return(ReceiptHelper.Generate(shoppingCart));
        }
 public ActionResult ListPartial(long periodId, long customerId, long currencyId)
 {
     SessionHelper.Calendar = CalendarHelper.GetCalendar(ReceivablePeriodHelper.GetReceivablePeriod(periodId.ToString()).CalendarId.ToString());
     return(PartialView("_List", ReceiptHelper.GetReceipts(SessionHelper.SOBId, SessionHelper.Calendar.Id, customerId, currencyId)));
 }
Example #15
0
        protected override void Process()
        {
            using (var unit = GetUnitOfWork())
            {
                var vendors           = unit.Scope.Repository <Vendor>().GetAll().ToList().Where(c => ((VendorType)c.VendorType).Has(VendorType.SupportsPFATransferOrders)).ToList();
                int transferOrderType = (int)OrderTypes.TransferOrder;
                var ledgerRepo        = unit.Scope.Repository <OrderLedger>();


                vendors.ForEach((vendor, indexer) =>
                {
                    var mutationEngine = new FileHelperEngine(typeof(ReceivedTransferMutation));

                    var fileName = String.Format("{0}{1}", "mancosurplus", DateTime.Now.ToString("yyyyMMddHHmmss"));

                    var mutations = new List <ReceivedTransferMutation>();

                    var rule = vendor.ContentProducts.FirstOrDefault(c => c.IsAssortment);

                    rule.ThrowIfNull("Publication rule with IsAssortment is missing for vendor " + vendor.Name);

                    List <OrderLine> lines = unit
                                             .Scope
                                             .Repository <OrderLine>()
                                             .GetAll(x => x.Order.OrderType == transferOrderType &&
                                                     x.Order.ConnectorID == rule.ConnectorID &&
                                                     x.OrderLedgers.Any(y => y.Status == (int)OrderLineStatus.ReceivedTransfer) &&
                                                     !x.OrderLedgers.Any(y => y.Status == (int)OrderLineStatus.ProcessedReceivedTransfer)).ToList();

                    var storeID        = ConnectorHelper.GetStoreNumber(rule.ConnectorID);
                    var employeeNumber = VendorHelper.GetEmployeeNumber(vendor.VendorID);

                    var salesSlipNumber = ReceiptHelper.GetSlipNumber(vendor.VendorID);
                    //ReceiptHelper.IncrementSalesSlipNumber(ref salesSlipNumber);

                    var toProcess = lines.GroupBy(k => k.Order).ToList().Select(c => new
                    {
                        Order           = c.Key,
                        OrderLines      = c.ToList(),
                        ExtraOrderLines = c.Key.OrderLines.Except(c.ToList())
                    }).ToList();

                    foreach (var order in toProcess)
                    {
                        PfaOrderHelper helper = new PfaOrderHelper(vendor.VendorID);

                        if (order.OrderLines.Count == 0)
                        {
                            continue;
                        }

                        order.OrderLines.AddRange(order.ExtraOrderLines);

                        var receivedByWehkampDate = order.OrderLines.FirstOrDefault().OrderLedgers.FirstOrDefault(c => c.Status == (int)OrderLineStatus.ReceivedTransfer).LedgerDate.ToLocalTime();

                        List <TransferOrderModel> list = helper.GetShippedQuantitiesForOrder(order.Order.WebSiteOrderNumber, order.Order.ConnectorID);
                        if (list.Count > 0)
                        {
                            List <TransferOrderLine> orderLinesToBeProcessed = GetOrderLineStatus(order.OrderLines, list, order.Order.OrderID, vendor.VendorID, unit);

                            if (list.Count > order.OrderLines.Count())
                            {
                                //more lines are in PFA than in the Concentrator
                                log.AuditInfo(string.Format("For order {0} there are {1} order lines in Concentrator and {2} in PFA. Difference found of {3} lines."
                                                            , order.Order.WebSiteOrderNumber, order.OrderLines.Count(), list.Count, order.ExtraOrderLines.Count()));
                            }

                            if (orderLinesToBeProcessed.Any(c => c.ShippedFromPFA != c.ReceivedFromWehkamp))
                            {
                                var differences = orderLinesToBeProcessed.Where(c => c.ShippedFromPFA != c.ReceivedFromWehkamp);

                                //add each quantity unmatched product
                                differences.ForEach((difference, index) =>
                                {
                                    var unmatchedQuantityLine = GetDifferenceRuleForIncompleteShipping(difference, orderLinesToBeProcessed.Sum(x => x.ReceivedFromWehkamp), orderLinesToBeProcessed.Sum(x => x.ShippedFromPFA), storeID, employeeNumber, vendor.VendorID, receivedByWehkampDate, salesSlipNumber);

                                    mutations.Add(unmatchedQuantityLine);
                                });

                                //add the total rule
                                mutations.AddRange(GetTotalRuleForIncompleteShipping(order.Order, orderLinesToBeProcessed.Sum(x => x.ReceivedFromWehkamp), orderLinesToBeProcessed.Sum(x => x.ShippedFromPFA), storeID, employeeNumber, vendor.VendorID, receivedByWehkampDate, salesSlipNumber));
                            }
                            else
                            {
                                //add quantity matched list
                                mutations.AddRange(GetCompletelyShippedRule(order.Order, orderLinesToBeProcessed.Sum(x => x.ReceivedFromWehkamp), storeID, employeeNumber, vendor.VendorID, receivedByWehkampDate, salesSlipNumber));
                            }
                        }
                        else
                        {
                            log.AuditError("Ignoring order " + order.Order.WebSiteOrderNumber + ": No lines found in PFA");
                        }
                        foreach (var line in order.OrderLines)
                        {
                            line.SetStatus(OrderLineStatus.ProcessedReceivedTransfer, ledgerRepo);
                        }
                        ReceiptHelper.IncrementSalesSlipNumber(ref salesSlipNumber, vendor.VendorID);
                    }

                    if (mutations.Count > 0)
                    {
                        var file = mutationEngine.WriteString(mutations);

                        var path = CommunicatorService.GetMessagePath(vendor.VendorID, MessageTypes.TransferOrderConfirmation);

                        File.WriteAllText(Path.Combine(path.MessagePath, fileName), file);
                    }
                    unit.Save();
                });
            }
        }
        /// <summary>
        /// Shows the receipt.
        /// </summary>
        /// <param name="receiptCode">The receipt code.</param>
        protected void ShowReceipt(string receiptCode)
        {
            var          rockContext  = new RockContext();
            ShoppingCart cart         = null;
            Person       customer     = null;
            int?         receiptId    = null;
            int          entityTypeId = EntityTypeCache.Get(typeof(InteractionComponent)).Id;
            int          maxAgeInDays = GetAttributeValue("MaxReceiptAge").AsInteger();

            nbNotFound.Visible = true;
            lReceipt.Text      = string.Empty;

            if (string.IsNullOrWhiteSpace(receiptCode))
            {
                return;
            }

            //
            // Attempt to decode the receipt code.
            //
            ushort?receiptSecret;

            receiptId = ReceiptHelper.DecodeReceiptCode(receiptCode, out receiptSecret);

            if (!receiptId.HasValue)
            {
                return;
            }

            //
            // Load the receipt and validate the code.
            //
            var receipt = new InteractionComponentService(rockContext).Get(receiptId.Value);

            if (receipt == null || !ReceiptHelper.ValidateReceiptCode(receipt, receiptCode))
            {
                return;
            }

            //
            // Verify the receipt is not past the age limit.
            //
            if (maxAgeInDays > 0 && RockDateTime.Now.Subtract(receipt.CreatedDateTime.Value).TotalDays >= maxAgeInDays)
            {
                return;
            }

            //
            // Load the cart and the customer if we have one.
            //
            cart = receipt.ComponentData.FromJsonOrNull <ShoppingCart>();
            if (cart == null)
            {
                return;
            }

            if (receipt.EntityId.HasValue)
            {
                customer = new PersonAliasService(rockContext).GetPerson(receipt.EntityId.Value);
            }

            //
            // Load any related payments.
            //
            var payments = new FinancialTransactionService(rockContext).Queryable()
                           .Where(t => t.TransactionDetails.Any(d => d.EntityTypeId == entityTypeId && d.EntityId == receiptId));

            //
            // Setup the lava merge and display the receipt.
            //
            var mergeFields = Rock.Lava.LavaHelper.GetCommonMergeFields(RockPage, CurrentPerson);

            mergeFields.Add("Cart", cart);
            mergeFields.Add("Person", customer);
            mergeFields.Add("Payments", payments);

            nbNotFound.Visible = false;
            lReceipt.Text      = GetAttributeValue("ReceiptTemplate").ResolveMergeFields(mergeFields, CurrentPerson);
        }