예제 #1
0
        //public struct OrderShort {
        //    public String UserOrgCode;
        //    public String Code;
        //    public String SubjectCode;
        //    public Boolean IsClosed;
        //    public DateTime DateOpen;
        //    public DateTime DateClose;
        //}

        //public static IList<OrderShort> Catalog(IObjectSpace os) {
        //    IIBSSyncService syncservice = new HTTPSyncService(ConfigurationManager.AppSettings["IBS.SyncService"]);
        //    XWZKXCIA lprm = new XWZKXCIA();
        //    lprm.CMD = "CATALOG";
        //    lprm.OGCODE = 1000;
        //    XWZKXCOA lres = syncservice.XWZKXC0N(lprm);
        //    List<OrderShort> result = new List<OrderShort>(lres.ZKLIST.Count);
        //    foreach (XWZKXCOAZKLIST item in lres.ZKLIST) {
        //        OrderShort ritem = new OrderShort();
        //        ritem.UserOrgCode = "1000";
        //        ritem.Code = item.ZKCODE;
        //        ritem.IsClosed = item.ZKISCLOSED;
        //        ritem.SubjectCode = item.ZKSUBJECTCODE;
        //        DateTime.TryParseExact(item.ZKDTOPEN, "yy-MM-dd", null, default(System.Globalization.DateTimeStyles), out ritem.DateOpen);
        //        DateTime.TryParseExact(item.ZKDTCLOSE, "yy-MM-dd", null, default(System.Globalization.DateTimeStyles), out ritem.DateClose);
        //        result.Add(ritem);
        //    }

        //    return result;
        //}
        public static XWZKXCOA Catalog(IObjectSpace os)
        {
            IIBSSyncService syncservice = new HTTPSyncService(ConfigurationManager.AppSettings["IBS.SyncService"]);
            XWZKXCIA        lprm        = new XWZKXCIA();

            lprm.CMD    = "CATALOG";
            lprm.OGCODE = 1000;
            XWZKXCOA lres = syncservice.XWZKXC0N(lprm);

            //List<OrderShort> result = new List<OrderShort>(lres.ZKLIST.Count);
            //foreach (XWZKXCOAZKLIST item in lres.ZKLIST) {
            //    OrderShort ritem = new OrderShort();
            //    ritem.UserOrgCode = "1000";
            //    ritem.Code = item.ZKCODE;
            //    ritem.IsClosed = item.ZKISCLOSED;
            //    ritem.SubjectCode = item.ZKSUBJECTCODE;
            //    DateTime.TryParseExact(item.ZKDTOPEN, "yy-MM-dd", null, default(System.Globalization.DateTimeStyles), out ritem.DateOpen);
            //    DateTime.TryParseExact(item.ZKDTCLOSE, "yy-MM-dd", null, default(System.Globalization.DateTimeStyles), out ritem.DateClose);
            //    result.Add(ritem);
            //}

            return(lres);
        }
        protected void DoWorkCore(LongOperation longOperation)
        {
            //Random random = new Random();
            IObjectSpace os = Application.CreateObjectSpace();
            //            IList<FullyAuditedBatchCreationObject> collection = updatingObjectSpace.GetObjects<FullyAuditedBatchCreationObject>();
            int index = 0;

            try {
                XWZKXCOA            short_orders = SynIBSOrderExchangeLogic.Catalog(os);
                IList <fmCOrderExt> orders       = os.GetObjects <fmCOrderExt>();
                IList <fmСOrderAnalitycAccouterType> acc_types = os.GetObjects <fmСOrderAnalitycAccouterType>();
                IList <fmCFAAccount> accounts = os.GetObjects <fmCFAAccount>(new BinaryOperator("AccountSystem.Code", "1000"));
                foreach (XWZKXCOAZKLIST short_order in short_orders.ZKLIST)
                {
                    fmCOrderExt order = orders.First(item => item.Code == short_order.ZKCODE);
                    if (order == null)
                    {
                        Trace.TraceWarning("IBSOrderSyncAll: Order >" + short_order.ZKCODE + "< not found");
                        continue;
                    }
                    if (!short_order.ZKISCLOSED)
                    {
                        if (order.Status == fmIOrderStatus.Project || order.Status == fmIOrderStatus.FinOpened)
                        {
                            order.Status   = fmIOrderStatus.Opened;
                            order.IsClosed = false;
                        }
                    }
                    else
                    {
                        if (order.Status == fmIOrderStatus.Project || order.Status == fmIOrderStatus.FinClosed)
                        {
                            order.Status   = fmIOrderStatus.Closed;
                            order.IsClosed = true;
                        }
                    }
                    if (!String.IsNullOrEmpty(short_order.ZKACCOUNTTYPE))
                    {
                        order.AnalitycAccouterType = acc_types.FirstOrDefault(x => x.Code == short_order.ZKACCOUNTTYPE);
                    }
                    if (!String.IsNullOrEmpty(short_order.ZKACCOUNTCODE))
                    {
                        order.BuhAccount = accounts.FirstOrDefault(x => x.BuhCode == short_order.ZKACCOUNTCODE);
                    }
                    os.CommitChanges();
                    //
                    if (longOperation.Status == LongOperationStatus.InProgress)
                    {
                        longOperation.RaiseProgressChanged((int)((++index * 100) / short_orders.ZKLIST.Count), "Обновляем заказ " + index.ToString() + " из " + short_orders.ZKLIST.Count.ToString());
                    }
                    if (longOperation.Status == LongOperationStatus.Cancelling)
                    {
                        return;
                    }
                }
            }
            catch (LongOperationTerminateException) {
                os.Rollback();
                longOperation.CancelAsync();
            }
            catch (Exception e) {
                longOperation.TerminateAsync();
                throw e;
            }
            //os.Rollback();
        }