コード例 #1
0
        /// <summary>
        /// Listen to carrier and direct to another person
        /// </summary>
        /// <param name="sender">previous hero</param>
        /// <param name="args">order params</param>
        public void ListenRequest(object sender, OrderEventArgs args)
        {
            IDeliver carrier = args.Carrier;

            this.ReceiveOrderBack  += carrier.DeliverOrder;
            Console.ForegroundColor = ConsoleColor.DarkYellow;
            Console.WriteLine("- Держи, {0}.", args.Carrier);
            Console.ResetColor();

            this.ReceiveOrderBack += ((Farmer)sender).ReceiveFairyObject;

            if (NeededObject == null)
            {
                throw new HeroException();
            }
            else
            if (ReceiveOrderBack != null)
            {
                ReceiveOrderBack(this, new OrderEventArgs(carrier, this, ProducedObject));
            }
            else
            {
                throw new HeroException();
            }
        }
コード例 #2
0
ファイル: LauncherService.cs プロジェクト: war-man/vInvoice
 public void PublishInv(string pattern, string serial, IInvoice[] mInvoiceList, string username = null)
 {
     try
     {
         Company  currentCom      = ((EInvoiceContext)FXContext.Current).CurrentCompany;
         IDeliver _DeliverService = currentCom.Config.ContainsKey("IDeliver") ? InvServiceFactory.GetDeliver(currentCom.Config["IDeliver"]) : null;
         if (mInvoiceList.Length <= 50)
         {
             Launcher.Instance.Launch(pattern, serial, mInvoiceList);
             Message = "OK";
         }
         else
         {
             for (int i = 0; i < mInvoiceList.Length / 50; i++)
             {
                 Launcher.Instance.Launch(pattern, serial, mInvoiceList.Skip(i * 50).Take(50).ToArray());
             }
             Message = "OK";
         }
         if (_DeliverService != null)
         {
             _DeliverService.PrepareDeliver(mInvoiceList, currentCom);
         }
     }
     catch (Exception ex)
     {
         Message = ex.Message;
     }
 }
コード例 #3
0
        public string confirmPaymentFkey(ListInvoice lsInv)
        {
            Company _currentCompany = ((EInvoiceContext)FXContext.Current).CurrentCompany;
            int     comID           = _currentCompany.id;

            if (_currentCompany == null)
            {
                return("ERlR:7");                        //username khong phu hop - ko tim thay company phu hop voi [username]
            }
            List <IInvoice> invLst = new List <IInvoice>();

            string[] invTokens = lsInv.lsFkey.Split('_');
            IPublishInvoiceService _PubInvSrv = IoC.Resolve <IPublishInvoiceService>();
            PublishInvoice         pubinv     = _PubInvSrv.GetFirst(comID, new int[] { 1, 2 });
            string pattern = "";

            if (pubinv != null)
            {
                pattern = pubinv.InvPattern;
                _PubInvSrv.UnbindSession(pubinv);
            }
            IInvoiceService invSrv = InvServiceFactory.GetService(pattern, comID);

            try
            {
                invLst = (List <IInvoice>)invSrv.GetByFkey(comID, invTokens);
                if (invTokens.Length != invLst.Count)
                {
                    return("ERR:6");
                }
                invLst.RemoveAll(inv => inv.PaymentStatus == Payment.Paid || (inv.Status != InvoiceStatus.SignedInv && inv.Status != InvoiceStatus.AdjustedInv));
            }
            catch (Exception ex)
            {
                log.Error("confirmPaymentFkey " + ex);
                return("ERR:6 " + ex.Message);
            }
            if (invLst.Count == 0)
            {
                return("ERR:13");            // hoa đơn đã gạch nợ/bỏ gạch nợ rồi
            }
            string strNote = "    ||    Thực hiện gạch nợ:   Người gạch nợ: " + HttpContext.Current.User.Identity.Name + "  Ngày gạch nợ: " + DateTime.Now.ToString();

            if (invSrv.ConfirmPayment(invLst, strNote))
            {
                //thuc hien deliveriy
                IDeliver _deliver = _currentCompany.Config.Keys.Contains("IDeliver") ? IoC.Resolve(Type.GetType(_currentCompany.Config["IDeliver"])) as IDeliver : null;
                if (_deliver != null)
                {
                    _deliver.Deliver(invLst.ToArray(), _currentCompany);
                }
                return("OK:");
            }
            return("ERR:7"); //sao lai khong thanh toán được ?
        }
コード例 #4
0
        public string deliverInv(ListInvoice lsInv)
        {
            Company _currentCompany = ((EInvoiceContext)FXContext.Current).CurrentCompany;
            int     comID           = _currentCompany.id;

            if (_currentCompany == null)
            {
                return("ERR:7");                        //username khong phu hop - ko tim thay company phu hop voi [username]
            }
            try
            {
                List <IInvoice> invLst = new List <IInvoice>();
                //List<decimal> invNos = new List<decimal>();
                Dictionary <string, List <decimal> > patternAndNo = new Dictionary <string, List <decimal> >();
                string[] invTokens = lsInv.lstInvToken.Split('_');
                foreach (string invToken in invTokens)
                {
                    string  pattern;
                    string  serial;
                    decimal invNo;
                    string  rv = DataHelper.parseInvToken(invToken, out pattern, out serial, out invNo);
                    if (!rv.Equals("OK"))
                    {
                        return(rv);
                    }
                    if (!patternAndNo.ContainsKey(pattern + ";" + serial))
                    {
                        patternAndNo[pattern + ";" + serial] = new List <decimal>();
                    }
                    patternAndNo[pattern + ";" + serial].Add(invNo);
                }
                foreach (KeyValuePair <string, List <decimal> > i in patternAndNo)
                {
                    string[]        key         = i.Key.Split(';');
                    IInvoiceService _iInvoicSrv = InvServiceFactory.GetService(key[0], comID);
                    invLst.AddRange(_iInvoicSrv.GetByNo(comID, key[0], key[1], i.Value.ToArray()));
                }
                if (invLst.Count != invTokens.Length)
                {
                    return("ERR:6");                                  //khong tim thay hoa don
                }
                ICompanyService _comSrv  = IoC.Resolve <ICompanyService>();
                Company         com      = _comSrv.Getbykey(comID);
                IDeliver        _deliver = _currentCompany.Config.Keys.Contains("IDeliver") ? IoC.Resolve(Type.GetType(_currentCompany.Config["IDeliver"])) as IDeliver : null;
                if (_deliver != null)
                {
                    _deliver.Deliver(invLst.ToArray(), com);
                }
            }
            catch (Exception ex)
            {
                log.Error("deliver: " + ex);
            }
            return("OK:");
        }
コード例 #5
0
        public string publishInv(ApiPublish publish)
        {
            Company currentCom = ((EInvoiceContext)FXContext.Current).CurrentCompany;
            ILog    log        = LogManager.GetLogger(typeof(PublishController));

            if (!LockTable.Contains(String.Format("{0}${1}", publish.pattern, currentCom.id)))
            {
                object lockobj = new object();
                LockTable.Add(String.Format("{0}${1}", publish.pattern, currentCom.id), lockobj);
            }
            lock (LockTable[String.Format("{0}${1}", publish.pattern, currentCom.id)])
            {
                IDeliver         _DeliverService = currentCom.Config.ContainsKey("IDeliver") ? InvServiceFactory.GetDeliver(currentCom.Config["IDeliver"]) : null;
                IInvoiceService  IInvSrv         = InvServiceFactory.GetService(publish.pattern, currentCom.id);
                IList <IInvoice> lst             = IInvSrv.GetByID(currentCom.id, publish.invIDs).OrderBy(p => p.CreateDate).ToList();
                try
                {
                    if (lst.Count() <= 50)
                    {
                        Launcher.Instance.Launch(publish.pattern, publish.serial, lst.ToArray());
                    }
                    else
                    {
                        for (int i = 0; i < lst.Count() / 50; i++)
                        {
                            Launcher.Instance.Launch(publish.pattern, publish.serial, lst.Skip(i * 50).Take(50).ToArray());
                        }
                    }
                    try
                    {
                        if (_DeliverService != null)
                        {
                            _DeliverService.PrepareDeliver(lst.ToArray(), currentCom);
                        }
                    }
                    catch (Exception ex)
                    {
                        log.Error(ex);
                    }
                    return("OK");
                }
                catch (EInvoice.Core.Launching.NoFactory.OpenTranException ex)
                {
                    log.Error(ex);
                    return("ERR:14");
                }
                catch (Exception ex)
                {
                    log.Error(ex);
                    return("ERR:5 " + ex.Message);//loi phat hanh hoa don
                }
            }
        }
コード例 #6
0
        public string deliverInvFkey(ListInvoice lsInv)
        {
            Company _currentCompany = ((EInvoiceContext)FXContext.Current).CurrentCompany;
            int     comID           = _currentCompany.id;

            if (_currentCompany == null)
            {
                return("ERR:7");                        //username khong phu hop - ko tim thay company phu hop voi [username]
            }
            try
            {
                List <IInvoice>        invLst     = new List <IInvoice>();
                string[]               invTokens  = lsInv.lsFkey.Split('_');
                IPublishInvoiceService _PubInvSrv = IoC.Resolve <IPublishInvoiceService>();
                PublishInvoice         pubinv     = _PubInvSrv.GetFirst(comID, new int[] { 1, 2 });
                string pattern = "";
                if (pubinv != null)
                {
                    pattern = pubinv.InvPattern;
                    _PubInvSrv.UnbindSession(pubinv);
                }
                IInvoiceService _iInvoicSrv = InvServiceFactory.GetService(pattern, comID);
                invLst = (List <IInvoice>)_iInvoicSrv.GetByFkey(comID, invTokens);

                if (invLst.Count != invTokens.Length)
                {
                    return("ERR:6");                                  //khong tim thay hoa don
                }
                ICompanyService _comSrv  = IoC.Resolve <ICompanyService>();
                Company         com      = _comSrv.Getbykey(comID);
                IDeliver        _deliver = _currentCompany.Config.Keys.Contains("IDeliver") ? IoC.Resolve(Type.GetType(_currentCompany.Config["IDeliver"])) as IDeliver : null;
                if (_deliver != null)
                {
                    _deliver.Deliver(invLst.ToArray(), com);
                }
            }
            catch (Exception ex)
            {
                log.Error("deliver: " + ex);
            }
            return("OK:");
        }
コード例 #7
0
ファイル: Cow.cs プロジェクト: darinal/BeanSeed
        /// <summary>
        /// Listen to carrier and direct to another person
        /// </summary>
        /// <param name="sender">previous hero</param>
        /// <param name="args">order params</param>
        public void ListenRequest(object sender, OrderEventArgs args)
        {
            IDeliver carrier = args.Carrier;

            this.OrderFairyObject += carrier.ReceiveOrder;
            this.ReceiveOrderBack += carrier.DeliverOrder;

            // Create next hero, which can give needed component
            Farmer farmer = new Farmer("Фермер", Sex.Male, Profession.Farmer);

            this.OrderFairyObject += farmer.ListenRequest;
            this.ReceiveOrderBack += ((Farmwife)sender).ReceiveFairyObject;

            // Couple of words to describe situation
            Console.ForegroundColor = ConsoleColor.DarkYellow;
            Console.Write("- {0} меня уже сутки не кормил! Принеси мне поесть {1} и я дам тебе {2}.", farmer, farmer.ProducedObject, this.ProducedObject);
            Console.ResetColor();

            // no needed object - no answer
            if (NeededObject == null)
            {
                if (OrderFairyObject != null)
                {
                    OrderFairyObject(this, new OrderEventArgs(carrier, farmer, farmer.ProducedObject));
                }
                else
                {
                    throw new HeroException();
                }
            }
            else
            if (ReceiveOrderBack != null)
            {
                ReceiveOrderBack(this, new OrderEventArgs(carrier, this, ProducedObject));
            }
            else
            {
                throw new HeroException();
            }
        }
コード例 #8
0
ファイル: Farmer.cs プロジェクト: darinal/BeanSeed
        /// <summary>
        /// Listen to carrier and direct to another person
        /// </summary>
        /// <param name="sender">previous hero</param>
        /// <param name="args">order params</param>
        public void ListenRequest(object sender, OrderEventArgs args)
        {
            IDeliver carrier = args.Carrier;

            this.OrderFairyObject += carrier.ReceiveOrder;
            this.ReceiveOrderBack += carrier.DeliverOrder;

            IronForger ironForger = new IronForger("Кузнец", Sex.Male, Profession.IronForger);

            this.OrderFairyObject += ironForger.ListenRequest;
            this.ReceiveOrderBack += ((Cow)sender).ReceiveFairyObject;

            Console.ForegroundColor = ConsoleColor.DarkYellow;
            Console.WriteLine("- Знаешь где живёт {0}? Возьми у него {1}, принеси и нею я скошу тебе {2}", ironForger, ironForger.ProducedObject, this.ProducedObject, this);
            Console.ResetColor();
            if (NeededObject == null)
            {
                if (OrderFairyObject != null)
                {
                    OrderFairyObject(this, new OrderEventArgs(carrier, ironForger, ironForger.ProducedObject));
                }
                else
                {
                    throw new HeroException();
                }
            }
            else
            if (ReceiveOrderBack != null)
            {
                ReceiveOrderBack(this, new OrderEventArgs(carrier, this, ProducedObject));
            }
            else
            {
                throw new HeroException();
            }
        }
コード例 #9
0
ファイル: Farmwife.cs プロジェクト: darinal/BeanSeed
        /// <summary>
        /// Listen to carrier and direct to another person
        /// </summary>
        /// <param name="sender">previous hero</param>
        /// <param name="args">order params</param>
        public void ListenRequest(object sender, OrderEventArgs args)
        {
            IDeliver carrier = args.Carrier;

            this.ReceiveOrder += carrier.ReceiveOrder;

            Cow cow = new Cow("Корова");

            this.ReceiveOrder += cow.ListenRequest;
            this.DeliverOrder += ((Hen)sender).HeplHusband;

            Console.ForegroundColor = ConsoleColor.DarkYellow;
            Console.WriteLine("- Ой, а у меня закончилось {2}! Возле дома в хлеву стоит {0}. Попроси у неё {1}, из него сделаю тебе {2}.", cow, cow.ProducedObject, this.ProducedObject);
            Console.ResetColor();

            if (NeededObject == null)
            {
                if (ReceiveOrder != null)
                {
                    ReceiveOrder(this, new OrderEventArgs(carrier, cow, cow.ProducedObject));
                }
                else
                {
                    throw new HeroException();
                }
            }
            else
            if (DeliverOrder != null)
            {
                DeliverOrder(this, new OrderEventArgs(carrier, this, ProducedObject));
            }
            else
            {
                throw new HeroException();
            }
        }
コード例 #10
0
ファイル: PaymentController.cs プロジェクト: war-man/vInvoice
        private PaymentTransaction paymentViaBlock(byte[] file)
        {
            //gach no theo lo
            Company            currentCom = ((EInvoiceContext)FXContext.Current).CurrentCompany;
            PaymentTransaction mTran      = new PaymentTransaction();

            mTran.Data        = file;
            mTran.ComID       = currentCom.id;
            mTran.id          = Guid.NewGuid();
            mTran.AccountName = HttpContext.User.Identity.Name;
            mTran.Status      = PaymentTransactionStatus.NewUpload;
            string        message         = "";
            IPaymentExcel paymentExcelSrv = IoC.Resolve <IPaymentExcel>();
            List <string> lstFkey         = paymentExcelSrv.GetFkey(file, mTran.id.ToString(), out message);

            if (lstFkey == null)
            {
                mTran.Messages = message;
                mTran.Status   = PaymentTransactionStatus.Failed;
                return(mTran);
            }
            List <IInvoice> invLst = new List <IInvoice>();
            PublishInvoice  pub    = DefaultPublishInvoice(currentCom.id);
            IInvoiceService invSrv = InvServiceFactory.GetService(pub.InvPattern, currentCom.id);
            int             count  = lstFkey.Count();

            log.Info("paymentViaBlock get Inv");
            List <IInvoice> foundLst = new List <IInvoice>();

            foundLst = (List <IInvoice>)invSrv.GetByFkey(currentCom.id, lstFkey.ToArray());
            log.Info("paymentViaBlock loc ket qua");
            List <string> foundFkey = foundLst.Select(inv => inv.Fkey).ToList();

            //khong ton tai
            lstFkey.RemoveAll(inv => foundFkey.Contains(inv));

            //đã gạch nợ rồi
            List <IInvoice> updateInv = foundLst.GetRange(0, foundLst.Count);

            updateInv.RemoveAll(inv => inv.PaymentStatus == Payment.Paid);      //cần gạch nợ
            foundLst.RemoveAll(inv => inv.PaymentStatus == Payment.Unpaid);     //đã gạch nợ rồi.

            List <string> unpaiedLst = updateInv.Select(inv => inv.Fkey).ToList();
            List <string> paiedList  = foundLst.Select(inv => inv.Fkey).ToList();

            //ko ton tai    lstFkey
            //da gach no    paiedList
            //can gach no   unpaiedLst

            //ghi file excel ket qua
            MemoryStream stream;
            ExcelWriter  writer;

            if (lstFkey.Count > 0 || paiedList.Count > 0)
            {
                stream = new MemoryStream();
                writer = new ExcelWriter(stream);
                writer.BeginWrite();
                int i = 0;
                for (; i < lstFkey.Count; i++)
                {
                    string s = lstFkey.ElementAt(i);
                    writer.WriteCell(i, 0, s);
                    writer.WriteCell(i, 1, "Khong ton tai");
                }
                for (int j = 0; j < paiedList.Count; j++)
                {
                    string s = paiedList.ElementAt(j);
                    i++;
                    writer.WriteCell(i, 0, s);
                    writer.WriteCell(i, 1, "Da thanh toan tu truoc");
                }
                writer.EndWrite();
                mTran.FailResult = stream.ToArray();
                stream.Close();
            }

            //thuc hien gach no va ghi note moi
            int[]  ids         = updateInv.Select(inv => inv.id).ToArray();
            string noteAppends = "    ||    Thực hiện gạch nợ:   Người gạch nợ: " + HttpContext.User.Identity.Name + "  Ngày gạch nợ: " + DateTime.Now.ToString();

            log.Info("paymentViaBlock gach no");
            if (invSrv.ConfirmPayment(ids, noteAppends))
            //if (invSrv.ConfirmPayment(updateInv))
            {
                //thanh cong het
                //tao file ket qua thanh cong
                log.Info("paymentViaBlock ghi file thanh cong");
                stream = new MemoryStream();
                writer = new ExcelWriter(stream);
                writer.BeginWrite();
                for (int j = 0; j < updateInv.Count; j++)
                {
                    string s = updateInv.ElementAt(j).Fkey;
                    writer.WriteCell(j, 0, s);
                }
                writer.EndWrite();
                mTran.CompleteResult = stream.ToArray();
                stream.Close();
                if (lstFkey.Count == 0)
                {
                    mTran.Status = PaymentTransactionStatus.Completed;
                }
                else
                {
                    mTran.Status = PaymentTransactionStatus.NotComplete;
                }
                log.Info("Change Payment Status Einvoices by: " + HttpContext.User.Identity.Name + " Info-- GUID: " + mTran.id.ToString() + "Tổng số: " + (count) + ", gạch nợ thành công " + updateInv.Count + ", không tồn tại: " + lstFkey.Count + ", đã gạch nợ trước: " + paiedList.Count + " hóa đơn");
                mTran.Messages = "Tổng số: " + (count) + ", gạch nợ thành công " + updateInv.Count + ", không tồn tại: " + lstFkey.Count + ", đã gạch nợ trước: " + paiedList.Count + " hóa đơn";
                //thuc hien deliveriy
                IDeliver _deliver = IoC.Resolve <IDeliver>();
                _deliver.Deliver(updateInv.ToArray(), currentCom);
                log.Info("paymentViaBlock end " + mTran.id);
                return(mTran);
            }
            mTran.Status = PaymentTransactionStatus.Failed;
            log.Info("Change Payment Status Einvoices by: " + HttpContext.User.Identity.Name + " Info-- GUID: " + mTran.id.ToString() + "Tổng số: " + (count) + " hóa đơn, gạch nợ fail " + updateInv.Count + ", không tồn tại: " + lstFkey.Count + ", đã gạch nợ trước: " + paiedList.Count + " hóa đơn");
            if (count == 0)
            {
                mTran.Messages = "File không đúng mẫu hoặc không chứa dữ liệu";
            }
            else
            {
                mTran.Messages = "Tổng số: " + (count) + " hóa đơn, gạch nợ fail " + updateInv.Count + ", không tồn tại: " + lstFkey.Count + ", đã gạch nợ trước: " + paiedList.Count + " hóa đơn";
            }
            return(mTran);
        }
コード例 #11
0
        public IHttpActionResult ImportAndPublishInv(ApiPublish publish)
        {
            ILog log = LogManager.GetLogger(typeof(PublishController));
            //check valiadate xml
            XmlSchemaValidator validator = new XmlSchemaValidator();

            //xmlInvData = convertSpecialCharacter(xmlInvData);
            if (!validator.ValidXmlDoc(publish.xmlData, "", AppDomain.CurrentDomain.BaseDirectory + @"xmlvalidate\VATInVoice_ws.xsd"))
            {
                log.Error(publish.xmlData);
                log.Error("ERR:3-" + validator.ValidationError);
                return(Ok("ERR:3-" + validator.ValidationError));  //du lieu dau vao khong hop le
            }

            if (publish.convert == 1)
            {
                publish.xmlData = DataHelper.convertTCVN3ToUnicode(publish.xmlData);
            }

            Company  _currentCompany = ((EInvoiceContext)FXContext.Current).CurrentCompany;
            IDeliver _DeliverService = _currentCompany.Config.ContainsKey("IDeliver") ? InvServiceFactory.GetDeliver(_currentCompany.Config["IDeliver"]) : null;
            int      comID           = _currentCompany.id;

            if (_currentCompany == null)
            {
                return(NotFound());
            }
            IPublishInvoiceService _PubInvSrv = IoC.Resolve <IPublishInvoiceService>();
            int    patternNull = string.IsNullOrEmpty(publish.pattern) ? 0 : 1;
            int    serialNull  = string.IsNullOrEmpty(publish.serial) ? 0 : 1;
            string nameInvoice = "";

            switch ((patternNull + serialNull))
            {
            case 0:
                PublishInvoice pubinv = _PubInvSrv.GetFirst(comID, new int[] { 1, 2 });
                if (pubinv != null)
                {
                    IRegisterTempService regisSrv = IoC.Resolve <IRegisterTempService>();
                    RegisterTemp         rtemp    = regisSrv.Getbykey(pubinv.RegisterID);
                    publish.pattern = pubinv.InvPattern;
                    publish.serial  = pubinv.InvSerial;
                    nameInvoice     = rtemp.NameInvoice;
                    _PubInvSrv.UnbindSession(pubinv);
                    regisSrv.UnbindSession(rtemp);
                }
                else
                {
                    return(Ok("ERR:20"));     //tham so pattern va serial khong hop le
                }
                break;

            case 1:
                PublishInvoice pubFirst = null;
                try
                {
                    if (!string.IsNullOrWhiteSpace(publish.pattern))
                    {
                        pubFirst = (from p in _PubInvSrv.Query where (p.ComId == comID) && (p.InvPattern == publish.pattern) && (p.Status == 1 || p.Status == 2) select p).FirstOrDefault();
                    }
                    else
                    {
                        pubFirst = (from p in _PubInvSrv.Query where (p.ComId == comID) && (p.InvSerial == publish.serial) && (p.Status == 1 || p.Status == 2) select p).FirstOrDefault();
                    }
                }
                catch (Exception ex)
                {
                    log.Error(ex);
                    return(Ok("ERR:20"));      //khong can return cung duoc
                }
                if (pubFirst == null)
                {
                    return(Ok("ERR:20"));
                }
                else
                {
                    IRegisterTempService regisSrv = IoC.Resolve <IRegisterTempService>();
                    RegisterTemp         rtemp    = regisSrv.Getbykey(pubFirst.RegisterID);
                    nameInvoice     = rtemp.NameInvoice;
                    publish.pattern = pubFirst.InvPattern;
                    publish.serial  = pubFirst.InvSerial;
                    _PubInvSrv.UnbindSession(pubFirst);
                    regisSrv.UnbindSession(rtemp);
                }
                break;

            case 2:
                // PublishInvoice pub = _PubInvSrv.CurrentPubInv(comID, pattern, serial, 1);
                PublishInvoice pub = null;
                try
                {
                    pub = (from p in _PubInvSrv.Query where (p.ComId == comID) && (p.InvPattern == publish.pattern) && (p.InvSerial == publish.serial) && (p.Status == 1 || p.Status == 2) select p).First();
                }
                catch (Exception ex)
                {
                    log.Error(ex);
                    return(Ok("ERR:20"));       //khong can return cung duoc
                }
                if (pub == null)
                {
                    return(Ok("ERR:20"));
                }
                else
                {
                    IRegisterTempService regisSrv = IoC.Resolve <IRegisterTempService>();
                    RegisterTemp         rtemp    = regisSrv.Getbykey(pub.RegisterID);
                    nameInvoice = rtemp.NameInvoice;
                    _PubInvSrv.UnbindSession(pub);
                    regisSrv.UnbindSession(rtemp);
                }
                break;
            }
            log.Info("pattern-serial: " + publish.pattern + "-" + publish.serial);
            XElement               elem             = XElement.Parse(publish.xmlData);
            IList <IInvoice>       lstINV           = new List <IInvoice>();
            string                 invKeyAndNumList = "";
            IEnumerable <XElement> listTemp         = elem.Elements("Inv");
            IList <String>         lstKey           = new List <String>();

            //check xem con du so hoa don ko
            if (getMaxInvNumber(comID, publish.pattern, publish.serial) < listTemp.Count())
            {
                return(Ok("ERR:6"));    //khong con du so hoa don cho lo phat hanh
            }
            //check xem lo truyen vao lon hon MaxBlockInv hay ko
            int    maxBlockInv;
            string temp = System.Configuration.ConfigurationManager.AppSettings["MaxBlockInv"];

            if (string.IsNullOrEmpty(temp) || !Int32.TryParse(temp, out maxBlockInv))
            {
                maxBlockInv = 5000;
            }
            if (listTemp.Count() > maxBlockInv)
            {
                return(Ok("ERR:10"));    // lo hoa don truyen vao lon hon maxBlockInv;
            }
            try
            {
                foreach (XElement e in listTemp)
                {
                    XElement ele  = e.Element("Invoice");
                    string   fKey = e.Element("key").Value.Trim();
                    lstKey.Add(fKey);
                    IInvoice inv  = InvServiceFactory.NewInstance(publish.pattern, comID);
                    string   read = string.Concat(ele);
                    inv.DeserializeFromXML(read);
                    inv.Name     = nameInvoice;
                    inv.Pattern  = publish.pattern;
                    inv.Serial   = publish.serial;
                    inv.CreateBy = inv.CreateBy ?? System.Web.HttpContext.Current.User.Identity.Name;
                    inv.Fkey     = fKey;
                    lstINV.Add(inv);
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
                return(Ok("ERR:5"));//loi phat hanh hoa don
            }

            try
            {
                Launcher.Instance.Launch(publish.pattern, publish.serial, lstINV.ToArray());
                if (_DeliverService != null)
                {
                    _DeliverService.PrepareDeliver(lstINV.ToArray(), _currentCompany);
                }
                for (int i = 0; i < lstINV.Count; i++)
                {
                    invKeyAndNumList += lstKey[i] + "_" + lstINV[i].No + ",";
                }
                //remove the last "," character
                invKeyAndNumList = invKeyAndNumList.Remove(invKeyAndNumList.Length - 1, 1);
                return(Ok("OK:" + publish.pattern + ";" + publish.serial + "-" + invKeyAndNumList));
            }
            catch (Exception ex)
            {
                log.Error(ex);
                return(Ok("ERR:13"));
            }
        }
コード例 #12
0
        public string confirmPayment(ListInvoice lsinv)
        {
            Company _currentCompany = ((EInvoiceContext)FXContext.Current).CurrentCompany;
            int     comID           = _currentCompany.id;

            if (_currentCompany == null)
            {
                return("ERR:7");                        //username khong phu hop - ko tim thay company phu hop voi [username]
            }
            List <IInvoice> invLst = new List <IInvoice>();

            string[] invTokens = lsinv.lstInvToken.Split('_');
            string   pattern;
            string   serial;
            decimal  invNo;

            if (invTokens.Length < 1 || (!DataHelper.parseInvToken(invTokens[0], out pattern, out serial, out invNo).Equals("OK")))
            {
                return(DataHelper.parseInvToken(invTokens[0], out pattern, out serial, out invNo));
            }
            IInvoiceService _iInvoicSrv = InvServiceFactory.GetService(pattern, comID);
            Dictionary <string, List <decimal> > serialAndNo = new Dictionary <string, List <decimal> >();

            foreach (string invToken in invTokens)
            {
                pattern = "";
                serial  = "";
                invNo   = 0;
                string rv = DataHelper.parseInvToken(invToken, out pattern, out serial, out invNo);
                if (!rv.Equals("OK"))
                {
                    return(rv);
                }
                if (!serialAndNo.ContainsKey(serial))
                {
                    serialAndNo[serial] = new List <decimal>();
                }
                serialAndNo[serial].Add(invNo);
            }
            //lấy list hóa đơn theo serial
            foreach (KeyValuePair <string, List <decimal> > i in serialAndNo)
            {
                invLst.AddRange(_iInvoicSrv.GetByNo(comID, pattern, i.Key, i.Value.ToArray()));
            }
            invLst.RemoveAll(inv => inv.Status != InvoiceStatus.SignedInv && inv.Status != InvoiceStatus.AdjustedInv);
            //ktra mọi token đều tìm được hóa đơn
            if (invTokens.Length != invLst.Count)
            {
                return("ERR:6");
            }

            invLst.RemoveAll(inv => inv.PaymentStatus == Payment.Paid || (inv.Status != InvoiceStatus.SignedInv && inv.Status != InvoiceStatus.AdjustedInv));
            if (invLst.Count == 0)
            {
                return("ERR:13");            // hoa đơn đã gạch nợ/bỏ gạch nợ rồi
            }
            ICompanyService _comSrv = IoC.Resolve <ICompanyService>();
            Company         com     = _comSrv.Getbykey(comID);
            string          strNote = "Thực hiện gạch nợ:   Người gạch nợ: " + HttpContext.Current.User.Identity.Name + "  Ngày gạch nợ: " + DateTime.Now.ToString();

            if (_iInvoicSrv.ConfirmPayment(invLst, strNote))
            {
                //thuc hien deliveriy
                IDeliver _deliver = _currentCompany.Config.Keys.Contains("IDeliver") ? IoC.Resolve(Type.GetType(_currentCompany.Config["IDeliver"])) as IDeliver : null;
                if (_deliver != null)
                {
                    _deliver.Deliver(invLst.ToArray(), com);
                }
                return("OK:");
            }
            return("ERR:7"); //sao lai khong thanh toán được ?
        }
コード例 #13
0
 public DeliveryPerson(string name, IDeliver strategy)
 {
     this.Name = name;
     this.Strategy = strategy;
 }
コード例 #14
0
        public string confirmPaymentDetailFkey(ListInvoice lsInv)
        {
            Company _currentCompany = ((EInvoiceContext)FXContext.Current).CurrentCompany;
            int     comID           = _currentCompany.id;

            if (_currentCompany == null)
            {
                return("ERR:7");                        //username khong phu hop - ko tim thay company phu hop voi [username]
            }
            List <IInvoice> invLst = new List <IInvoice>();

            string[] invTokens = lsInv.lsFkey.Split('_');
            if (invTokens.Count() > 1000)
            {
                return("ERR:14");
            }
            IPublishInvoiceService _PubInvSrv = IoC.Resolve <IPublishInvoiceService>();
            PublishInvoice         pubinv     = _PubInvSrv.GetFirst(comID, new int[] { 1, 2 });
            string pattern = "";

            if (pubinv != null)
            {
                pattern = pubinv.InvPattern;
                _PubInvSrv.UnbindSession(pubinv);
            }
            IInvoiceService invSrv     = InvServiceFactory.GetService(pattern, comID);
            StringBuilder   sb         = new StringBuilder();
            List <string>   unPaidFkey = new List <string>();
            string          rv;

            try
            {
                invLst = (List <IInvoice>)invSrv.GetByFkey(comID, invTokens);
                List <string> foundFkey    = invLst.Select(inv => inv.Fkey).ToList();
                List <string> notFoundFkey = invTokens.ToList().GetRange(0, invTokens.Count());
                notFoundFkey.RemoveAll(inv => foundFkey.Contains(inv)); // list fkey khong ton tai
                invLst.RemoveAll(inv => inv.PaymentStatus == Payment.Paid || (inv.Status != InvoiceStatus.SignedInv && inv.Status != InvoiceStatus.AdjustedInv));
                unPaidFkey = invLst.Select(inv => inv.Fkey).ToList();   // list fkey can gach no
                foundFkey.RemoveAll(inv => unPaidFkey.Contains(inv));   // list fkey da gach no roi
                sb = new StringBuilder("ERR:6#");
                foreach (string s in notFoundFkey)
                {
                    sb.AppendFormat("{0}_", s);
                }
                rv = sb.ToString();
                rv = rv.Remove(rv.Length - 1, 1);
                sb = new StringBuilder("ERR:13#");
                foreach (string s in foundFkey)
                {
                    sb.AppendFormat("{0}_", s);
                }
                rv = rv + "||" + sb.ToString();
                rv = rv.Remove(rv.Length - 1, 1);
            }
            catch (Exception ex)
            {
                log.Error("confirmPaymentFkey " + ex);
                return("ERR:6 " + ex.Message);
            }
            if (invLst.Count == 0)
            {
                //toan bo lo hoa don hoac ko tim thay, hoac da gach no roi
                return(rv);
            }
            string strNote = "    ||    Thực hiện gạch nợ:   Người gạch nợ: " + HttpContext.Current.User.Identity.Name + "  Ngày gạch nợ: " + DateTime.Now.ToString();

            if (invSrv.ConfirmPayment(invLst, strNote))
            {
                //thuc hien deliveriy
                IDeliver _deliver = _currentCompany.Config.Keys.Contains("IDeliver") ? IoC.Resolve(Type.GetType(_currentCompany.Config["IDeliver"])) as IDeliver : null;
                if (_deliver != null)
                {
                    _deliver.Deliver(invLst.ToArray(), _currentCompany);
                }
                //return "OK:";
                sb = new StringBuilder("OK:#");
                foreach (string s in unPaidFkey)
                {
                    sb.AppendFormat("{0}_", s);
                }
                rv = rv + "||" + sb.ToString();
                rv = rv.Remove(rv.Length - 1, 1);
                return(rv);  //ok
            }
            return("ERR:7"); //sao lai khong thanh toán được ?
        }
コード例 #15
0
 public OrderEventArgs(IDeliver carrier, FairyHero supplier, FairyObject fairyObject)
 {
     Carrier     = carrier;
     Supplier    = supplier;
     FairyObject = fairyObject;
 }
コード例 #16
0
 public DeliveryPerson(string name, IDeliver strategy)
 {
     this.Name     = name;
     this.Strategy = strategy;
 }
コード例 #17
0
        public string confirmPaymentFkeyVNP(ListInvoice lsInv)
        {
            Company _currentCompany = ((EInvoiceContext)FXContext.Current).CurrentCompany;
            int     comID           = _currentCompany.id;

            if (_currentCompany == null)
            {
                return("ERR:7");                        //username khong phu hop - ko tim thay company phu hop voi [username]
            }
            List <IInvoice> invLst = new List <IInvoice>();

            string[] invTokens = lsInv.lsFkey.Split(';');
            IPublishInvoiceService _PubInvSrv = IoC.Resolve <IPublishInvoiceService>();
            PublishInvoice         pubinv     = _PubInvSrv.GetFirst(comID, new int[] { 1, 2 });
            string pattern = "";

            if (pubinv != null)
            {
                pattern = pubinv.InvPattern;
                _PubInvSrv.UnbindSession(pubinv);
            }
            IInvoiceService invSrv = InvServiceFactory.GetService(pattern, comID);

            try
            {
                invLst = (List <IInvoice>)invSrv.GetByFkey(comID, invTokens);
                if (invTokens.Length != invLst.Count)
                {
                    return("ERR:6");
                }
                invLst.RemoveAll(inv => inv.PaymentStatus == Payment.Paid || (inv.Status != InvoiceStatus.SignedInv && inv.Status != InvoiceStatus.AdjustedInv));
                for (int i = 0; i < invTokens.Length; i++)
                {
                    invTokens[i] = invTokens[i] + "K";
                }
                List <IInvoice> invKLst = new List <IInvoice>();
                invKLst = (List <IInvoice>)invSrv.GetByFkey(comID, invTokens);
                invKLst.RemoveAll(inv => inv.PaymentStatus == Payment.Paid || (inv.Status != InvoiceStatus.SignedInv && inv.Status != InvoiceStatus.AdjustedInv));
                if (invKLst.Count > 0)
                {
                    invLst.AddRange(invKLst);
                }
            }
            catch (Exception ex)
            {
                log.Error("confirmPaymentFkey " + ex);
                return("ERR:6 " + ex.Message);
            }
            if (invLst.Count == 0)
            {
                return("ERR:13");            // hoa đơn đã gạch nợ/bỏ gạch nợ rồi
            }
            string strNote = "    ||    Thực hiện gạch nợ:   Người gạch nợ: " + HttpContext.Current.User.Identity.Name + "  Ngày gạch nợ: " + DateTime.Now.ToString();

            if (invSrv.ConfirmPayment(invLst, strNote))
            {
                //thuc hien deliveriy
                IDeliver _deliver = _currentCompany.Config.Keys.Contains("IDeliver") ? IoC.Resolve(Type.GetType(_currentCompany.Config["IDeliver"])) as IDeliver : null;
                if (_deliver != null)
                {
                    _deliver.Deliver(invLst.ToArray(), _currentCompany);
                }

                //lay link email
                String        weblink = System.Configuration.ConfigurationManager.AppSettings["Portal"] + "/Email/EmailInvoiceView?token=";
                StringBuilder rv      = new StringBuilder("OK:<Data>");
                foreach (IInvoice inv in invLst)
                {
                    rv.Append("<Item><index>").Append(inv.PublishDate.Month).Append("</index>");
                    rv.Append("<cusCode>").Append(inv.CusCode).Append("</cusCode>");
                    if (inv.Fkey.EndsWith("K"))
                    {
                        rv.Append("<month>").Append(inv.Fkey.Substring(inv.Fkey.Length - 7, 6)).Append("</month>");
                    }
                    else
                    {
                        rv.Append("<month>").Append(inv.Fkey.Substring(inv.Fkey.Length - 6, 6)).Append("</month>");
                    }
                    rv.Append("<pattern>").Append(inv.Pattern).Append("</pattern>");
                    rv.Append("<serial>").Append(inv.Serial).Append("</serial>");
                    rv.Append("<status>").Append((int)inv.Status).Append("</status>");
                    string stoken = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(inv.id.ToString() + "_" + inv.Pattern + "_" + _currentCompany.id.ToString()));
                    rv.AppendFormat("<link>{0}{1}</link></Item>", weblink, stoken);
                }
                rv.Append("</Data>");
                return(rv.ToString());
                //}
                //else return "OK:";
            }
            return("ERR:7"); //sao lai khong thanh toán được ?
        }
コード例 #18
0
        public string confirmPaymentDetail(ListInvoice inv)
        {
            Company _currentCompany = ((EInvoiceContext)FXContext.Current).CurrentCompany;
            int     comID           = _currentCompany.id;

            if (_currentCompany == null)
            {
                return("ERR:7");                        //username khong phu hop - ko tim thay company phu hop voi [username]
            }
            List <IInvoice> invLst = new List <IInvoice>();

            string[]      invTokens = inv.lstInvToken.Split('_');
            List <string> unPaid    = new List <string>();
            List <string> notFound  = new List <string>();
            List <string> paid      = new List <string>();
            string        pattern;
            string        serial;
            decimal       invNo;
            string        rv = "";

            if (invTokens.Length < 1 || (!DataHelper.parseInvToken(invTokens[0], out pattern, out serial, out invNo).Equals("OK")))
            {
                return(DataHelper.parseInvToken(invTokens[0], out pattern, out serial, out invNo));
            }
            IInvoiceService _iInvoicSrv = InvServiceFactory.GetService(pattern, comID);

            foreach (string invToken in invTokens)
            {
                pattern = "";
                serial  = "";
                invNo   = 0;
                rv      = DataHelper.parseInvToken(invToken, out pattern, out serial, out invNo);
                if (!rv.Equals("OK"))
                {
                    return(rv);
                }
                IInvoice oInvoiceBase = _iInvoicSrv.GetByNo(comID, pattern, serial, invNo);
                if (oInvoiceBase == null)
                {
                    //return "ERR:6"; //khong tim thay hoa don
                    notFound.Add(invToken);
                }
                if (oInvoiceBase.PaymentStatus == Payment.Unpaid && (oInvoiceBase.Status == InvoiceStatus.AdjustedInv || oInvoiceBase.Status == InvoiceStatus.SignedInv))
                {
                    invLst.Add(oInvoiceBase);
                    unPaid.Add(invToken);
                }
                else
                {
                    paid.Add(invToken);
                }
            }
            rv = "";
            StringBuilder sb = new StringBuilder("ERR:6#");

            foreach (string s in notFound)
            {
                sb.AppendFormat("{0}_", s);
            }
            rv = sb.ToString();
            rv = rv.Remove(rv.Length - 1, 1);
            sb = new StringBuilder("ERR:13#");
            foreach (string s in paid)
            {
                sb.AppendFormat("{0}_", s);
            }
            rv = rv + "||" + sb.ToString();
            rv = rv.Remove(rv.Length - 1, 1);
            if (invLst.Count == 0)
            {
                //return "ERR:13";            // hoa đơn đã gạch nợ/bỏ gạch nợ rồi
                return(rv);
            }
            ICompanyService _comSrv = IoC.Resolve <ICompanyService>();
            Company         com     = _comSrv.Getbykey(comID);
            string          strNote = "Thực hiện gạch nợ:   Người gạch nợ: " + HttpContext.Current.User.Identity.Name + "  Ngày gạch nợ: " + DateTime.Now.ToString();

            if (_iInvoicSrv.ConfirmPayment(invLst, strNote))
            {
                //thuc hien deliveriy
                IDeliver _deliver = _currentCompany.Config.Keys.Contains("IDeliver") ? IoC.Resolve(Type.GetType(_currentCompany.Config["IDeliver"])) as IDeliver : null;
                if (_deliver != null)
                {
                    _deliver.Deliver(invLst.ToArray(), com);
                }
                //return "OK:";
                sb = new StringBuilder("OK:#");
                foreach (string s in unPaid)
                {
                    sb.AppendFormat("{0}_", s);
                }
                rv = rv + "||" + sb.ToString();
                rv = rv.Remove(rv.Length - 1, 1);
                return(rv);  //ok
            }
            return("ERR:7"); //sao lai khong thanh toán được ?
        }