コード例 #1
0
        /// <summary>
        ///  Method to complete cash drop
        ///  </summary>
        /// <param name="selectedTenders">Selected tenders</param>
        /// <param name="tillNumber">Till number</param>
        /// <param name="userCode">User code</param>
        /// <param name="registerNumber">Register number</param>
        /// <param name="reason">Reason code</param>
        /// <param name="envelopeNumber">Envelope number</param>
        /// <param name="copies">Copies</param>
        /// <param name="error">Error</param>
        /// <returns>Stream</returns>
        public FileStream CompleteCashDrop(List <Tender> selectedTenders, int tillNumber, string userCode,
                                           byte registerNumber, string reason, string envelopeNumber, out int copies, out ErrorMessage error)
        {
            var dateStart = DateTime.Now;

            _performancelog.Debug($"Start,CashManager,CompleteCashDrop,{string.Empty},{dateStart:hh.mm.ss.ffffff}");
            copies = _policyManager.CashDropReceiptCopies;
            var offSet = _policyManager.LoadStoreInfo().OffSet;

            error = new ErrorMessage();
            Till till = _tillService.GetTill(tillNumber);

            if (till == null)
            {
                error.MessageStyle = new MessageStyle
                {
                    Message = "Till does not exists"
                };
                error.StatusCode = System.Net.HttpStatusCode.NotFound;
                return(null);
            }
            User user = _loginManager.GetExistingUser(userCode);

            if (!Convert.ToBoolean(_policyManager.GetPol("U_TILLDROP", user)))
            {
                MessageType temp_VbStyle3 = (int)MessageType.Exclamation + MessageType.OkOnly;
                error.MessageStyle = _resourceManager.CreateMessage(offSet, 38, 55, null, temp_VbStyle3);
                error.StatusCode   = System.Net.HttpStatusCode.Forbidden;
                return(null);
            }

            var dropDate = DateTime.Now;

            if (!IsValidReason(reason))
            {
                error.MessageStyle = new MessageStyle
                {
                    Message = "Invalid reason"
                };
                error.StatusCode = System.Net.HttpStatusCode.NotFound;
                return(null);
            }


            if (_policyManager.DropEnv && string.IsNullOrEmpty(envelopeNumber))
            {
                error.MessageStyle = _resourceManager.CreateMessage(offSet, 12, 65, null, MessageType.OkOnly);
                error.StatusCode   = System.Net.HttpStatusCode.NotFound;
                return(null);
            }



            var bt = Convert.ToString(_policyManager.BASECURR);

            var cntDrop = _cashService.GetMaxCashDrop(till.Number, till.ShiftDate, till.Shift);

            var tenders = _tenderManager.Load(null, "CashDrop", false, reason, out error);

            var cashDropTenders = GetCashDropTenders(selectedTenders, tenders, 0, out error);

            if (!string.IsNullOrEmpty(error.MessageStyle.Message))
            {
                return(null);
            }
            CashDrop cashDrop = new CashDrop
            {
                Envelope_No = envelopeNumber,
                ReasonCode  = reason,
                DropID      = _cashService.GetMaxDropId(DataSource.CSCTills)
            };

            //  -   adding the unique dropid (max drop number)
            if (cashDrop.DropID == 0)
            {
                var dropId = _cashService.GetMaxDropId(DataSource.CSCTrans);
                cashDrop.DropID = dropId == 0 ? 1 : dropId;
            }
            //
            var fs = _receiptManager.PrintDrop(cashDropTenders, till, user, registerNumber, cashDrop, cntDrop);

            AddDropHeader(tillNumber, userCode, till, dropDate, cntDrop, cashDrop);

            AddDropLines(till, bt, dropDate, cashDropTenders, cashDrop);
            CacheManager.DeleteTendersForCashDrop("CashDrop", reason);
            _performancelog.Debug($"End,CashManager,CompleteCashDrop,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");

            return(fs);
        }