/// <summary>
        /// カート情報から取引ログを作成します
        /// </summary>
        /// <param name="cart">カート Document</param>
        /// <returns>作成した取引ログ Document</returns>
        public async Task <TransactionLogDocument> CreateTransactionLogAsync(CartDocument cart)
        {
            var tranDoc = new TransactionLogDocument
            {
                CompanyCode      = cart.CompanyCode,
                StoreCode        = cart.StoreCode,
                StoreName        = cart.StoreName,
                TerminalNo       = cart.TerminalNo,
                TransactionNo    = cart.TransactionNo,
                TransactionType  = cart.TransactionType,
                BusinessDate     = DateTimeUtility.GetApplicationTimeNow().Date,
                GenerateDateTime = DateTimeUtility.GetApplicationTimeNow(),
                ReceiptNo        = cart.ReceiptNo,
                User             = cart.User,
                Sales            = cart.Sales,
                LineItems        = cart.LineItems.Select(l => (TransactionLogBase.LineItem)l).ToList(),
                Payments         = cart.Payments,
                Taxes            = cart.Taxes
            };

            await this.CreateAsync(tranDoc);

            return(tranDoc);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 取引ログからレシートを作成・登録します
        /// </summary>
        /// <param name="cartDoc">カート Document</param>
        /// <returns>作成したレシート Document</returns>
        public async Task <ReceiptDocument> CreateReceiptAsync(CartDocument cartDoc)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

            var receiptDoc = new ReceiptDocument()
            {
                CompanyCode      = cartDoc.CompanyCode,
                StoreCode        = cartDoc.StoreCode,
                TerminalNo       = cartDoc.TerminalNo,
                TransactionNo    = cartDoc.TransactionNo,
                TransactionType  = cartDoc.TransactionType,
                BusinessDate     = cartDoc.BusinessDate,
                GenerateDateTime = cartDoc.GenerateDateTime,
                ReceiptNo        = cartDoc.ReceiptNo,
                ReceiptText      = this.MakeReceiptLayout(cartDoc),
                User             = new UserInfo {
                    UserId = cartDoc.User.UserId, UserName = cartDoc.User.UserName
                }
            };

            await this.CreateAsync(receiptDoc);

            return(receiptDoc);
        }
Exemplo n.º 3
0
        /// <summary>
        /// レシートをレイアウトします
        /// </summary>
        /// <param name="cartDoc">カート Document</param>
        /// <returns>レイアウトしたレシート</returns>
        private string MakeReceiptLayout(CartDocument cartDoc)
        {
            // ヘッダ作成
            var title = cartDoc.TransactionType == TransactionType.NormalSales.TypeNo ?
                        "            領 収 書            " : "        取引中止<売上>        ";

            this._receiptData.AppendLine(title);
            this.MakeText($"店No:{cartDoc.StoreCode}", $"端末No:{cartDoc.TerminalNo.ToString().PadLeft(4, '0')}");
            this._receiptData.AppendLine(cartDoc.GenerateDateTime.ToString("yyyy年MM月dd日 HH時mm分"));
            this._receiptData.AppendLine(string.Empty);
            this.MakeCenterText(cartDoc.StoreName);
            this.MakeCenterText("TEL:03-XXXX-XXXX");
            this._receiptData.AppendLine("お買い上げありがとうございます。");
            this._receiptData.AppendLine(string.Empty);

            // 明細作成
            cartDoc.LineItems.ForEach(item =>
            {
                string amountString    = string.Empty;
                string unitPriceString = string.Empty;
                string qtyString       = string.Empty;

                amountString = this.MakeCurrencyText(item.Amount);
                this.MakeText(item.DescriptionShort, amountString + " ");

                // 単価x個数
                if (item.Quantity > 1)
                {
                    unitPriceString = "@" + this.MakeCurrencyText(item.UnitPrice);
                    unitPriceString = unitPriceString.PadLeft(11, ' ');
                    qtyString       = "x" + item.Quantity.ToString("#,0");
                    this._receiptData.AppendLine(unitPriceString + qtyString);
                }
            });

            this._receiptData.AppendLine(string.Empty.PadLeft(this._receiptWith, '-'));

            // 小計・支払作成
            this.MakeText("買上点数", cartDoc.Sales.TotalQuantity.ToString("#,0") + " ");
            this.MakeText("小計", this.MakeCurrencyText(cartDoc.Sales.TotalAmount) + " ");

            cartDoc.Taxes.ForEach(tax =>
            {
                var taxInfo = cartDoc.Masters.Taxes.Where(row => row.TaxCode == tax.TaxCode).FirstOrDefault();

                if (taxInfo.TaxCode == TaxType.IncludedTax.Code)
                {
                    string includedTaxAmountString = this.MakeCurrencyText(tax.TaxAmount) + ")";
                    decimal includedTaxRate        = taxInfo.Rate / 100;
                    this.MakeText("(内税額" + includedTaxRate.ToString("P0").PadLeft(3, ' '), includedTaxAmountString);
                }
                else
                {
                    throw new NotImplementedException();
                }
            });

            this._receiptData.AppendLine(string.Empty);

            this.MakeText("税込合計", this.MakeCurrencyText(cartDoc.Sales.TotalAmountWithTaxes) + " ");

            cartDoc.Payments.ForEach(payment =>
            {
                this.MakeText(payment.Description, this.MakeCurrencyText(payment.Amount) + " ");
            });

            this.MakeText("お釣り", this.MakeCurrencyText(cartDoc.Sales.ChangeAmount) + " ");

            // フッタ
            this._receiptData.AppendLine(string.Empty);
            this._receiptData.AppendLine("上記正に領収いたしました。");
            this._receiptData.AppendLine(string.Empty);

            var receiptNoString = cartDoc.ReceiptNo != 0 ? cartDoc.ReceiptNo.ToString().Trim().PadLeft(4, '0') : "----";

            this._receiptData.AppendLine("レシートNo" + receiptNoString);

            return(this._receiptData.ToString());
        }