Example #1
0
        /// <summary>
        /// 结算维修单
        /// </summary>
        /// <param name="model"></param>
        public void Settlement(RepairSettlementModel model)
        {
            if (model == null)
            {
                return;
            }

            if (model.SettlementAmount <= 0)
            {
                throw new Exception("请输入结算金额。");
            }

            var order = Get(model.RepairOrderId);

            if (order == null)
            {
                throw new Exception("维修单不存在。");
            }

            if (order.Status != EnumRepairOrderStatus.Completed)
            {
                throw new Exception("只能结算已完工的维修单。");
            }

            if (order.SettlementStatus == EnumSettlementStatus.Completed)
            {
                throw new Exception("只能结算未结算的维修单。");
            }

            order.SettlementStatus = model.SettlementStatus;
            order.SettlementAmount = order.SettlementAmount + model.SettlementAmount;

            if (order.SettlementAmount >= order.Amount && order.SettlementStatus == EnumSettlementStatus.PartCompleted)
            {
                throw new Exception("结算金额已超过维修单总金额,不允许部分结算。");
            }

            var financeOrder = new FinanceOrder();

            financeOrder.Code   = this.FinanceOrderRepository.GetSequenceNextCode();
            financeOrder.Amount = model.SettlementAmount;
            financeOrder.Remark = model.SettlementRemark;

            this.RepairOrderRepository.Settlement(order, financeOrder);
        }
Example #2
0
        /// <summary>
        /// 结算采购单
        /// </summary>
        /// <param name="model"></param>
        public void Settlement(PurchaseSettlementModel model)
        {
            if (model == null)
            {
                return;
            }

            if (model.SettlementAmount <= 0)
            {
                throw new Exception("请填写结算金额。");
            }

            var order = PurchaseOrderRepository.GetModel(model.PurchaseOrderId);

            if (order == null)
            {
                throw new Exception("采购单不存在。");
            }

            if (order.Status != EnumPurchaseOrderStatus.Completed)
            {
                throw new Exception("只能结算已全部到货的采购单。");
            }

            if (order.SettlementStatus != EnumSettlementStatus.Waiting && order.SettlementStatus != EnumSettlementStatus.PartCompleted)
            {
                throw new Exception("只能结算待结算的采购单。");
            }

            order.SettlementStatus = model.SettlementStatus;
            order.SettlementAmount = order.SettlementAmount + model.SettlementAmount;

            if (order.SettlementAmount >= order.Amount && order.SettlementStatus == EnumSettlementStatus.PartCompleted)
            {
                throw new Exception("结算金额已超过采购单总金额,不允许部分结算。");
            }

            var financeOrder = new FinanceOrder();

            financeOrder.Code   = this.FinanceOrderRepository.GetSequenceNextCode();
            financeOrder.Amount = model.SettlementAmount;
            financeOrder.Remark = model.SettlementRemark;

            this.PurchaseOrderRepository.Settlement(order, financeOrder);
        }
        public async Task <IActionResult> Post([FromBody] FinanceOrder order)
        {
            if (!ModelState.IsValid)
            {
                HIHAPIUtility.HandleModalStateError(ModelState);
            }

            // Check
            if (!order.IsValid(this._context))
            {
                throw new BadRequestException("Inputted Object IsValid failed");
            }

            // User
            String usrName = String.Empty;

            try
            {
                usrName = HIHAPIUtility.GetUserID(this);
                if (String.IsNullOrEmpty(usrName))
                {
                    throw new UnauthorizedAccessException();
                }
            }
            catch
            {
                throw new UnauthorizedAccessException();
            }

            // Check whether User assigned with specified Home ID
            var hms = _context.HomeMembers.Where(p => p.HomeID == order.HomeID && p.User == usrName).Count();

            if (hms <= 0)
            {
                throw new UnauthorizedAccessException();
            }

            order.CreatedAt = DateTime.Now;
            order.Createdby = usrName;
            _context.FinanceOrder.Add(order);
            await _context.SaveChangesAsync();

            return(Created(order));
        }
Example #4
0
        /// <summary>
        /// 取消维修单
        /// </summary>
        /// <param name="idList"></param>
        public void CancelOrder(IList <Guid> idList)
        {
            if (idList == null || !idList.Any())
            {
                return;
            }

            foreach (var Id in idList)
            {
                var model = GetModel(Id);
                if (model == null)
                {
                    continue;
                }

                var order = new FinanceOrder();
                order.Code = this.FinanceOrderRepository.GetSequenceNextCode();

                this.RepairOrderRepository.Cancel(model, order);
            }
        }
Example #5
0
        /// <summary>
        /// 结算销售单
        /// </summary>
        /// <param name="model"></param>
        public void Settlement(SaleSettlementModel model)
        {
            if (model == null)
            {
                return;
            }

            var order = SaleOrderRepository.GetModel(model.SaleOrderId);

            if (order == null)
            {
                throw new Exception("销售单不存在。");
            }

            if (order.Status != EnumSaleOrderStatus.Outbound)
            {
                throw new Exception("只能结算已出库的销售单。");
            }

            if (order.SettlementStatus == EnumSettlementStatus.Completed)
            {
                throw new Exception("只能结算未结算的销售单。");
            }

            order.SettlementStatus = model.SettlementStatus;
            order.SettlementAmount = order.SettlementAmount + model.SettlementAmount;

            if (order.SettlementAmount >= order.Amount && order.SettlementStatus == EnumSettlementStatus.PartCompleted)
            {
                throw new Exception("结算金额已超过销售单总金额,不允许部分结算。");
            }

            var financeOrder = new FinanceOrder();

            financeOrder.Code   = this.FinanceOrderRepository.GetSequenceNextCode();
            financeOrder.Amount = model.SettlementAmount;
            financeOrder.Remark = model.SettlementRemark;

            SaleOrderRepository.Settlement(order, financeOrder);
        }
        /// <summary>
        /// 结算采购单
        /// </summary>
        /// <param name="model"></param>
        /// <param name="order"></param>
        public void Settlement(PurchaseOrder model, FinanceOrder order)
        {
            using (var context = DbContext.Open())
            {
                using (var tran = context.OpenTransaction())
                {
                    // 修改采购单
                    model.SettlementOn = DateTime.Now;
                    context.Update(model);

                    // 新增财务单
                    order.Id         = order.Id == Guid.Empty ? Guid.NewGuid() : order.Id;
                    order.RelationId = model.Id;
                    order.CreatedOn  = model.SettlementOn;
                    order.Type       = EnumFinanceOrderType.Purchase;
                    order.Remark     = string.Format("结算采购单:{0}", model.Code);
                    context.Insert(order);

                    tran.Commit();
                }
            }
        }
        public async Task <IActionResult> Put([FromODataUri] int key, [FromBody] FinanceOrder update)
        {
            if (!ModelState.IsValid)
            {
                HIHAPIUtility.HandleModalStateError(ModelState);
            }

            if (key != update.ID)
            {
                throw new BadRequestException("Inputted ID mismatched");
            }

            // User
            String usrName = String.Empty;

            try
            {
                usrName = HIHAPIUtility.GetUserID(this);
                if (String.IsNullOrEmpty(usrName))
                {
                    throw new UnauthorizedAccessException();
                }
            }
            catch
            {
                throw new UnauthorizedAccessException();
            }

            // Check whether User assigned with specified Home ID
            var hms = _context.HomeMembers.Where(p => p.HomeID == update.HomeID && p.User == usrName).Count();

            if (hms <= 0)
            {
                throw new UnauthorizedAccessException();
            }

            if (!update.IsValid(this._context))
            {
                return(BadRequest());
            }

            update.Updatedby             = usrName;
            update.UpdatedAt             = DateTime.Now;
            _context.Entry(update).State = EntityState.Modified;

            // SRules.
            var rulesInDB = _context.FinanceOrderSRule.Where(p => p.OrderID == update.ID).ToList();

            foreach (var rule in update.SRule)
            {
                var itemindb = rulesInDB.Find(p => p.OrderID == update.ID && p.RuleID == rule.RuleID);
                if (itemindb == null)
                {
                    _context.FinanceOrderSRule.Add(rule);
                }
                else
                {
                    // Update
                    _context.Entry(itemindb).State = EntityState.Modified;
                }
            }
            foreach (var rule in rulesInDB)
            {
                var nitem = update.SRule.FirstOrDefault(p => p.OrderID == update.ID && p.RuleID == rule.RuleID);
                if (nitem == null)
                {
                    _context.FinanceOrderSRule.Remove(rule);
                }
            }

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException exp)
            {
                if (!_context.FinanceOrder.Any(p => p.ID == key))
                {
                    return(NotFound());
                }
                else
                {
                    throw new DBOperationException(exp.Message);
                }
            }

            return(Updated(update));
        }
Example #8
0
        public async Task TestCase1()
        {
            string token = await IdentityServerSetup.Instance.GetAccessTokenForUser(DataSetupUtility.UserA, DataSetupUtility.IntegrationTestPassword);

            var clientWithAuth = _factory.CreateClient();

            clientWithAuth.SetBearerToken(token);

            // Step 1. Metadata request
            var metadata = await this._client.GetAsync("/api/$metadata");

            Assert.Equal(HttpStatusCode.OK, metadata.StatusCode);
            var content = await metadata.Content.ReadAsStringAsync();

            if (content.Length > 0)
            {
                // How to verify metadata?
                // TBD.
            }

            // Step 2. Read Home Defines - Non authority case
            var req1 = await this._client.GetAsync("/api/HomeDefines");

            Assert.Equal(HttpStatusCode.Unauthorized, req1.StatusCode);

            // Step 3. Read Home Defines - Authority case
            var resp2 = await clientWithAuth.GetAsync("/api/HomeDefines");

            Assert.True(resp2.IsSuccessStatusCode);
            string result = resp2.Content.ReadAsStringAsync().Result;

            if (!String.IsNullOrEmpty(result))
            {
                JToken outer = JToken.Parse(result);

                // Old way to deserialize the arry
                JArray inner = outer["value"].Value <JArray>();
                var    dfs   = inner.ToObject <List <HomeDefine> >();
                Assert.Equal(2, dfs.Count);

                // For user A, Home1 Is a must
                var bHome1Exist = false;
                foreach (var df in dfs)
                {
                    Assert.NotNull(df);
                    Assert.True(df.ID > 0);
                    Assert.False(String.IsNullOrEmpty(df.Name));
                    Assert.NotNull(df.HomeMembers);
                    if (df.ID == DataSetupUtility.Home1ID)
                    {
                        bHome1Exist = true;
                    }
                }
                Assert.True(bHome1Exist);
            }

            // Step 4. Read home defines - with home members
            resp2 = await clientWithAuth.GetAsync("/api/HomeDefines?$expand=HomeMembers");

            Assert.True(resp2.IsSuccessStatusCode);
            result = resp2.Content.ReadAsStringAsync().Result;
            if (!String.IsNullOrEmpty(result))
            {
                JToken outer = JToken.Parse(result);

                JArray inner = outer["value"].Value <JArray>();
                var    dfs   = inner.ToObject <List <HomeDefine> >();
                Assert.Equal(2, dfs.Count);

                // For user A, Home1 Is a must
                foreach (var df in dfs)
                {
                    Assert.NotNull(df);
                    Assert.True(df.ID > 0);
                    Assert.False(String.IsNullOrEmpty(df.Name));
                    Assert.NotNull(df.HomeMembers);
                    var exist = df.HomeMembers.Single(p => p.User == DataSetupUtility.UserA);
                    Assert.NotNull(exist);
                }
            }

            var hid      = DataSetupUtility.Home1ID;
            var cc1id    = 0;
            var ord1id   = 0;
            var acnt1id  = 0;
            var doc1id   = 0;
            var jsetting = new JsonSerializerSettings();

            jsetting.Converters.Add(new StringEnumConverter());
            jsetting.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            jsetting.DateFormatString      = "yyyy-MM-dd";

            // Step 5. Create a control center
            var cc = new FinanceControlCenter()
            {
                HomeID  = hid,
                Name    = "Control Center 1",
                Comment = "Comment 1",
                Owner   = DataSetupUtility.UserA
            };
            var kjson        = JsonConvert.SerializeObject(cc, jsetting);
            var inputContent = new StringContent(kjson, Encoding.UTF8, "application/json");

            resp2 = await clientWithAuth.PostAsync("/api/FinanceControlCenters", inputContent);

            Assert.True(resp2.IsSuccessStatusCode);
            result = resp2.Content.ReadAsStringAsync().Result;
            if (!String.IsNullOrEmpty(result))
            {
                var odatarst = JsonConvert.DeserializeObject <FinanceControlCenter>(result);
                Assert.Equal(odatarst.Name, cc.Name);
                Assert.Equal(odatarst.HomeID, cc.HomeID);
                Assert.Equal(odatarst.Owner, cc.Owner);
                cc1id = odatarst.ID;
                Assert.True(cc1id > 0);
            }

            // Step 6. Create an order
            var ord = new FinanceOrder()
            {
                HomeID  = hid,
                Name    = "Order 1",
                Comment = "Comment 1"
            };
            var srule = new FinanceOrderSRule()
            {
                Order           = ord,
                RuleID          = 1,
                ControlCenterID = cc1id,
                Precent         = 100
            };

            ord.SRule.Add(srule);
            kjson        = JsonConvert.SerializeObject(ord, jsetting);
            inputContent = new StringContent(kjson, Encoding.UTF8, "application/json");
            resp2        = await clientWithAuth.PostAsync("/api/FinanceOrders", inputContent);

            Assert.True(resp2.IsSuccessStatusCode);
            result = resp2.Content.ReadAsStringAsync().Result;
            if (!String.IsNullOrEmpty(result))
            {
                var odatarst = JsonConvert.DeserializeObject <FinanceOrder>(result);
                Assert.Equal(odatarst.Name, ord.Name);
                ord1id = odatarst.ID;
                Assert.True(ord1id > 0);
            }

            // Step 7. Create an account
            var acnt = new FinanceAccount()
            {
                HomeID     = DataSetupUtility.Home1ID,
                Name       = "Account 1",
                CategoryID = FinanceAccountCategory.AccountCategory_Cash,
                Owner      = DataSetupUtility.UserA
            };

            kjson        = JsonConvert.SerializeObject(acnt, jsetting);
            inputContent = new StringContent(kjson, Encoding.UTF8, "application/json");
            resp2        = await clientWithAuth.PostAsync("/api/FinanceAccounts", inputContent);

            Assert.True(resp2.IsSuccessStatusCode);
            result = resp2.Content.ReadAsStringAsync().Result;
            if (!String.IsNullOrEmpty(result))
            {
                var odatarst = JsonConvert.DeserializeObject <FinanceAccount>(result);
                Assert.Equal(odatarst.Name, acnt.Name);
                acnt1id = odatarst.ID;
                Assert.True(acnt1id > 0);
            }

            // Step 7a. Get all accounts
            resp2 = await clientWithAuth.GetAsync("/api/FinanceAccounts?hid=" + hid.ToString());

            Assert.True(resp2.IsSuccessStatusCode);
            result = resp2.Content.ReadAsStringAsync().Result;
            if (!String.IsNullOrEmpty(result))
            {
                //var odatarst = JsonConvert.DeserializeObject<FinanceAccount>(result);
                //Assert.Equal(odatarst.Name, acnt.Name);
                //acnt1id = odatarst.ID;
                //Assert.True(acnt1id > 0);
            }

            // Step 7b. Read one specified account
            resp2 = await clientWithAuth.GetAsync("/api/FinanceAccounts(" + acnt1id.ToString() + ")"); // ?hid=" + hid.ToString());

            Assert.True(resp2.IsSuccessStatusCode);
            result = resp2.Content.ReadAsStringAsync().Result;
            if (!String.IsNullOrEmpty(result))
            {
            }

            // Step 8. Post a document
            var doc = new FinanceDocument()
            {
                DocType  = FinanceDocumentType.DocType_Normal,
                HomeID   = hid,
                TranDate = DateTime.Today,
                Desp     = "First document",
                TranCurr = DataSetupUtility.Home1BaseCurrency,
            };
            var item = new FinanceDocumentItem()
            {
                DocumentHeader  = doc,
                ItemID          = 1,
                Desp            = "Item 1.1",
                TranType        = 2, // Wage
                TranAmount      = 10,
                AccountID       = acnt1id,
                ControlCenterID = cc1id,
            };

            doc.Items.Add(item);
            jsetting.NullValueHandling = NullValueHandling.Ignore;
            kjson        = JsonConvert.SerializeObject(doc, jsetting);
            inputContent = new StringContent(kjson, Encoding.UTF8, "application/json");
            resp2        = await clientWithAuth.PostAsync("/api/FinanceDocuments", inputContent);

            Assert.True(resp2.IsSuccessStatusCode);
            result = resp2.Content.ReadAsStringAsync().Result;
            if (!String.IsNullOrEmpty(result))
            {
                var odatarst = JsonConvert.DeserializeObject <FinanceDocument>(result);
                Assert.Equal(odatarst.Desp, doc.Desp);
                doc1id = odatarst.ID;
                Assert.True(doc1id > 0);
            }

            // Step 9. Create an ADP document
            //var adpcontext = new FinanceADPDocumentCreateContext();
            //adpcontext.DocumentInfo = new FinanceDocument();
            //adpcontext.AccountInfo = new FinanceAccount();
        }
        /// <summary>
        /// 取消采购单
        /// </summary>
        /// <param name="model"></param>
        /// <param name="order"></param>
        public void Cancel(PurchaseOrder model, FinanceOrder order)
        {
            using (var context = DbContext.Open())
            {
                using (var tran = context.BeginTransaction())
                {
                    #region 调整库存
                    foreach (var item in model.ProductList)
                    {
                        var product = item.Product;
                        if (product == null)
                        {
                            continue;
                        }

                        if (model.Status == EnumPurchaseOrderStatus.Completed)
                        {   // 如果是已到货的采购单,需要回滚配件库存
                            // 插入配件出入库记录
                            var record = new ProductStockRecord
                            {
                                Id             = Guid.NewGuid(),
                                CreatedOn      = DateTime.Now,
                                ProductId      = product.Id,
                                Quantity       = item.Quantity,
                                QuantityBefore = product.Stock,
                                RecordOn       = DateTime.Now,
                                RelationId     = model.Id,
                                Type           = EnumStockRecordType.CancelPurchase,
                                Remark         = string.Format("取消采购单:{0}", model.Code),
                            };
                            context.Insert(record);

                            // 减去配件库存
                            product.Stock = product.Stock - item.Quantity;
                            context.Update(product);
                        }
                    }
                    #endregion

                    #region 增加财务单
                    if (model.SettlementAmount > 0)
                    {
                        // 如果已经结算过,增加取消采购单的财务单
                        order.Id         = Guid.NewGuid();
                        order.Amount     = model.SettlementAmount;
                        order.Type       = EnumFinanceOrderType.CancelPurchase;
                        order.CreatedOn  = DateTime.Now;
                        order.RelationId = model.Id;
                        order.Remark     = order.Remark ?? string.Format("取消采购单:{0}", model.Code);
                        context.Insert(order);
                    }
                    #endregion

                    // 删除采购单配件
                    context.Delete <PurchaseOrderProduct>(rop => rop.PurchaseOrderId == model.Id);

                    // 删除采购单
                    context.Delete <PurchaseOrder>(ro => ro.Id == model.Id);

                    tran.Commit();
                }
            }
        }
Example #10
0
        public async Task TestCase1(int hid, string user)
        {
            var context = this.fixture.GetCurrentDataContext();

            if (hid == DataSetupUtility.Home1ID)
            {
                fixture.InitHome1TestData(context);
            }
            if (hid == DataSetupUtility.Home2ID)
            {
                fixture.InitHome2TestData(context);
            }
            if (hid == DataSetupUtility.Home3ID)
            {
                fixture.InitHome3TestData(context);
            }
            if (hid == DataSetupUtility.Home4ID)
            {
                fixture.InitHome4TestData(context);
            }
            if (hid == DataSetupUtility.Home5ID)
            {
                fixture.InitHome5TestData(context);
            }

            // 1. Prepare dta
            var userclaim = DataSetupUtility.GetClaimForUser(user);
            var httpctx   = UnitTestUtility.GetDefaultHttpContext(provider, userclaim);
            var listCCs   = context.FinanceControlCenter.Where(p => p.HomeID == hid).ToList <FinanceControlCenter>();

            var curhmemquery = (from homemem in context.HomeMembers where homemem.HomeID == hid && homemem.User == user select homemem).FirstOrDefault();
            var curhmem      = Assert.IsType <HomeMember>(curhmemquery);
            var existamt     = (from homemem in context.HomeMembers
                                join finord in context.FinanceOrder
                                on new { homemem.HomeID, homemem.User } equals new { finord.HomeID, User = user }
                                select finord.ID).ToList().Count();
            var existamt_curhome = context.FinanceOrder.Where(p => p.HomeID == hid).Count();

            // 2. Create order
            var control = new FinanceOrdersController(context);

            control.ControllerContext = new ControllerContext()
            {
                HttpContext = httpctx
            };
            var ord = new FinanceOrder()
            {
                HomeID  = hid,
                Name    = "Order 1",
                Comment = "Comment 1"
            };
            var srule = new FinanceOrderSRule()
            {
                Order           = ord,
                RuleID          = 1,
                ControlCenterID = listCCs[0].ID,
                Precent         = 100
            };

            ord.SRule.Add(srule);
            var rst = await control.Post(ord);

            Assert.NotNull(rst);
            var rst2 = Assert.IsType <CreatedODataResult <FinanceOrder> >(rst);

            Assert.Equal(rst2.Entity.Name, ord.Name);
            var oid = rst2.Entity.ID;

            Assert.True(oid > 0);
            ordersCreated.Add(oid);

            // 3. Read the order out (without Home ID)
            var queryUrl     = "http://localhost/api/FinanceOrders";
            var req          = UnitTestUtility.GetHttpRequest(httpctx, "GET", queryUrl);
            var odatacontext = UnitTestUtility.GetODataQueryContext <FinanceOrder>(this.model);
            var options      = UnitTestUtility.GetODataQueryOptions <FinanceOrder>(odatacontext, req);
            var rst3         = control.Get(options);

            Assert.NotNull(rst3);
            if (curhmem.IsChild.HasValue && curhmem.IsChild == true)
            {
                existamt = context.FinanceOrder.Where(p => p.HomeID == hid).Count();
                Assert.Equal(existamt + 1, rst3.Cast <FinanceOrder>().Count());
            }
            else
            {
                Assert.Equal(existamt + 1, rst3.Cast <FinanceOrder>().Count());
            }

            // 3a. Read the order out (with Home ID)
            queryUrl = "http://localhost/api/FinanceOrders?$filter=HomeID eq " + hid.ToString();
            req      = UnitTestUtility.GetHttpRequest(httpctx, "GET", queryUrl);
            //var odatacontext = UnitTestUtility.GetODataQueryContext<FinanceOrder>(this.model);
            options = UnitTestUtility.GetODataQueryOptions <FinanceOrder>(odatacontext, req);
            rst3    = control.Get(options);
            Assert.NotNull(rst3);
            Assert.Equal(existamt_curhome + 1, rst3.Cast <FinanceOrder>().Count());

            // 4a. Change one order - Add new rule
            var norder = rst2.Entity;

            norder.Name = "New Order";
            norder.SRule.ElementAt(0).Precent = 80;
            norder.SRule.Add(new FinanceOrderSRule
            {
                Order           = norder,
                RuleID          = 2,
                ControlCenterID = listCCs.Count > 1 ? listCCs[1].ID : listCCs[0].ID,
                Precent         = 20
            });
            rst = await control.Put(norder.ID, norder);

            Assert.NotNull(rst);
            var rst4 = Assert.IsType <UpdatedODataResult <FinanceOrder> >(rst);

            Assert.Equal(norder.Name, rst4.Entity.Name);
            // Re-read the order
            //queryUrl = "http://localhost/api/FinanceOrders?$filter=HomeID eq " + hid.ToString() + " and ID eq " + norder.ID.ToString() + "&$expand=SRule";
            //req = UnitTestUtility.GetHttpRequest(httpctx, "GET", queryUrl);
            //options = UnitTestUtility.GetODataQueryOptions<FinanceOrder>(odatacontext, req);
            //rst3 = control.Get(options);
            //var rst3a = rst3.Cast<FinanceOrder>();
            //Assert.True(rst3a.Count() == 1);
            //var rst3a_elem = rst3a.ElementAt(0);
            //Assert.True(rst3a_elem.SRule.Count == 2);
            ////var rst3a = Assert.IsType<FinanceOrder>(rst3);
            ////Assert.True(rst3a.SRule.Count == 2);

            // 5. Delete an order
            var rst5 = await control.Delete(oid);

            Assert.NotNull(rst4);
            var rst6 = Assert.IsType <StatusCodeResult>(rst5);

            Assert.Equal(204, rst6.StatusCode);
            Assert.Equal(0, context.FinanceOrderSRule.Where(p => p.OrderID == oid).Count());
            ordersCreated.Clear();

            // 6. Read the order again
            queryUrl = "http://localhost/api/FinanceOrders?$filter=HomeID eq " + hid.ToString();
            req      = UnitTestUtility.GetHttpRequest(httpctx, "GET", queryUrl);
            options  = UnitTestUtility.GetODataQueryOptions <FinanceOrder>(odatacontext, req);
            rst3     = control.Get(options);
            Assert.NotNull(rst3);
            Assert.Equal(existamt_curhome, rst3.Cast <FinanceOrder>().Count());

            await context.DisposeAsync();
        }
Example #11
0
        //
        static void Main(string[] args)
        {
            Session bses = GetSession();
            int     i    = 1;

            if (args[0] == "city")
            {
                using (UnitOfWork ses = bses.BeginNestedUnitOfWork()) {
                    XPQuery <csAddress> aq = new XPQuery <csAddress>(ses);
                    var q = from address in aq
                            where (address.City == null ||
                                   address.City == "" ||
                                   address.City == " ") &&
                            !(address.AddressString == null ||
                              address.AddressString == "" ||
                              address.AddressString == " ")
                            select address;
                    foreach (csAddress address in q)
                    {
                        System.Console.WriteLine(address.AddressString + " : " +
                                                 address.AddressHandmake + " : " +
                                                 address.City);
                        address.City = "Не задан";
                    }
                    System.Console.WriteLine(q.Count());
                    ses.CommitChanges();
                }
            }
            if (args[0] == "party")
            {
                Excel.Application xlApp       = null;
                Excel.Workbook    xlWorkBook  = null;
                Excel.Worksheet   xlWorkSheet = null;

                xlApp = new Excel.ApplicationClass();

                // Открытие документа (книги) excel
                xlWorkBook = xlApp.Workbooks.Open("e:\\party2.xls");

                // Выбирается Лист (если существует)
                xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
                //
                //try {
                while (true)
                {
                    using (UnitOfWork ses = bses.BeginNestedUnitOfWork()) {
                        i++;
                        ExcelParty ep = new ExcelParty();
                        //                    Excel.Range range = xlWorkSheet.get_Range("A" + i, "P" + i);
                        //                    Excel.Range range2 = xlWorkSheet.get_Range("A1");
                        if (xlWorkSheet.get_Range("A" + i).Value2 == null)
                        {
                            break;
                        }
                        ep.code = xlWorkSheet.get_Range("A" + i).Value2.ToString();
                        ep.type = xlWorkSheet.get_Range("B" + i).Value2.ToString();
                        if (xlWorkSheet.get_Range("C" + i).Value2 != null)
                        {
                            ep.close = xlWorkSheet.get_Range("C" + i).Value2.ToString();
                        }
                        else
                        {
                            ep.close = String.Empty;
                        }
                        if (xlWorkSheet.get_Range("E" + i).Value2 != null)
                        {
                            ep.country = UpFirstCase(xlWorkSheet.get_Range("E" + i).Value2.ToString());
                        }
                        else
                        {
                            ep.country = String.Empty;
                        }
                        if (xlWorkSheet.get_Range("F" + i).Value2 != null)
                        {
                            ep.city = UpFirstCase(xlWorkSheet.get_Range("F" + i).Value2.ToString());
                        }
                        else
                        {
                            ep.city = "-";
                        }
                        if (xlWorkSheet.get_Range("G" + i).Value2 != null)
                        {
                            ep.legal = xlWorkSheet.get_Range("G" + i).Value2.ToString();
                        }
                        else
                        {
                            ep.legal = String.Empty;
                        }
                        if (xlWorkSheet.get_Range("H" + i).Value2 != null)
                        {
                            ep.lpt = xlWorkSheet.get_Range("H" + i).Value2.ToString();
                        }
                        else
                        {
                            ep.lpt = "-";
                        }
                        ep.inn = xlWorkSheet.get_Range("I" + i).Value2.ToString();
                        if (xlWorkSheet.get_Range("J" + i).Value2 != null)
                        {
                            ep.kpp = xlWorkSheet.get_Range("J" + i).Value2.ToString();
                        }
                        else
                        {
                            ep.kpp = String.Empty;
                        }
                        ep.name = xlWorkSheet.get_Range("K" + i).Value2.ToString();
                        ep.addr = xlWorkSheet.get_Range("L" + i).Value2.ToString();
                        //                    party.NameFull = party.Name;
                        //                    party.AddressFact.AddressHandmake = xlWorkSheet.get_Range("L" + i, "L" + i).Value2.ToString();
                        //                    party.INN = xlWorkSheet.get_Range("I" + i, "I" + i).Value2.ToString();
                        //                    party.KPP = xlWorkSheet.get_Range("J" + i, "J" + i).Value2.ToString();
                        switch (ep.type)
                        {
                        case "ЛЮ":
                            crmCLegalPerson lp = NewLegalPerson(ses, ep);
                            //lp.Save();
                            break;

                        case "ЛФ":
                            crmCPhysicalParty php = new crmCPhysicalParty(ses);
                            php.Code                         = ep.code;
                            php.NameHandmake                 = ep.name;
                            php.INN                          = ep.inn;
                            php.AddressLegal.Country         = GetCountry(ses, ep.country);
                            php.AddressLegal.City            = ep.city;
                            php.AddressLegal.AddressHandmake = ep.addr;
                            php.AddressFact.Country          = php.AddressLegal.Country;
                            php.AddressFact.City             = ep.city;
                            php.AddressFact.AddressHandmake  = ep.addr;
                            if (!String.IsNullOrEmpty(ep.close.Trim()))
                            {
                                php.IsClosed = true;
                            }
                            //php.Save();
                            break;

                        case "ИП":
                            crmCBusinessman bp = new crmCBusinessman(ses);
                            bp.Code                         = ep.code;
                            bp.NameHandmake                 = ep.name;
                            bp.INN                          = ep.inn;
                            bp.PersonType                   = GetPersonType(ses, ep.lpt);
                            bp.AddressLegal.Country         = GetCountry(ses, ep.country);
                            bp.AddressLegal.City            = ep.city;
                            bp.AddressLegal.AddressHandmake = ep.addr;
                            bp.AddressFact.Country          = bp.AddressLegal.Country;
                            bp.AddressFact.City             = ep.city;
                            bp.AddressFact.AddressHandmake  = ep.addr;
                            if (!String.IsNullOrEmpty(ep.close.Trim()))
                            {
                                bp.IsClosed = true;
                            }
                            //bp.Save();
                            break;

                        case "ФИЛИАЛ":
                            crmCLegalPersonUnit lpu = UpdateLegalPersonUnit(ses, ep);
                            //lpu.Save();
                            break;

                        case "ПРОЧИЕ":
                            crmCParty party2 = new crmCParty(ses);
                            party2.Code = ep.code;
                            party2.Name = ep.name;
                            party2.INN  = ep.inn;
                            party2.AddressFact.Country         = GetCountry(ses, ep.country);
                            party2.AddressFact.City            = ep.city;
                            party2.AddressFact.AddressHandmake = ep.addr;
                            if (!String.IsNullOrEmpty(ep.close.Trim()))
                            {
                                party2.IsClosed = true;
                            }
                            //party2.Save();
                            break;

                        case "ДОМ":
                            crmCParty party = new crmCParty(ses);
                            party.Code = ep.code;
                            party.Name = ep.name;
                            party.INN  = ep.inn;
                            party.AddressFact.Country         = GetCountry(ses, ep.country);
                            party.AddressFact.City            = ep.city;
                            party.AddressFact.AddressHandmake = ep.addr;
                            if (!String.IsNullOrEmpty(ep.close.Trim()))
                            {
                                party.IsClosed = true;
                            }
                            //party.Save();
                            break;

                        default:
                            throw new NotSupportedException();
                        }

                        //MessageBox.Show(xlWorkSheet.get_Range("B1", "B1").Value2.ToString());

                        System.Console.WriteLine(ep.type + ' ' + ep.code + ' ' + ep.name + ' ' + ep.addr);
                        ses.CommitChanges();
                    }
                }
                //}
                //catch (Exception e) {
                //        if (xlWorkSheet != null) releaseObject(xlWorkSheet);
                //        if (xlWorkBook != null) releaseObject(xlWorkBook);
                //        if (xlApp != null) releaseObject(xlApp);
                //        xlWorkSheet = null;
                //        xlWorkBook = null;
                //        xlApp = null;
                //        GC.Collect();
                //        System.Console.WriteLine(e);
                //        throw new Exception("Error clear", e);
                //    }

                // Закрытие книги
                xlWorkBook.Close(true, misValue, misValue);
                xlApp.Quit();
            }
            if (args[0] == "dogovor")
            {
                Excel.Application xlApp       = null;
                Excel.Workbook    xlWorkBook  = null;
                Excel.Worksheet   xlWorkSheet = null;

                xlApp = new Excel.ApplicationClass();

                // Открытие документа (книги) excel
                xlWorkBook = xlApp.Workbooks.Open("e:\\Договора.xlsx");

                // Выбирается Лист (если существует)
                xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
                //
                try {
                    while (true)
                    {
                        using (UnitOfWork ses = bses.BeginNestedUnitOfWork()) {
                            i++;
                            ExcelDogovor dog = new ExcelDogovor();
                            //                    Excel.Range range = xlWorkSheet.get_Range("A" + i, "P" + i);
                            //                    Excel.Range range2 = xlWorkSheet.get_Range("A1");
                            if (xlWorkSheet.get_Range("A" + i).Value2 == null)
                            {
                                break;
                            }
                            dog.staff_code = xlWorkSheet.get_Range("A" + i).Value2.ToString();
                            dog.dep_code   = xlWorkSheet.get_Range("B" + i).Value2.ToString();
                            dog.type       = xlWorkSheet.get_Range("C" + i).Value2.ToString();

                            dog.dog_id  = xlWorkSheet.get_Range("F" + i).Value2.ToString();
                            dog.dog_num = xlWorkSheet.get_Range("G" + i).Value2.ToString();
                            String str_date = xlWorkSheet.get_Range("H" + i).Value2.ToString();
                            dog.dog_date = DateTime.Parse(str_date.Substring(0, 4) + "." +
                                                          str_date.Substring(4, 2) + "." +
                                                          str_date.Substring(6, 2));
                            if (xlWorkSheet.get_Range("I" + i).Value2 != null)
                            {
                                dog.dop_id   = xlWorkSheet.get_Range("I" + i).Value2.ToString();
                                dog.dop_num  = xlWorkSheet.get_Range("J" + i).Value2.ToString();
                                str_date     = xlWorkSheet.get_Range("K" + i).Value2.ToString();
                                dog.dop_date = DateTime.Parse(str_date.Substring(0, 4) + "." +
                                                              str_date.Substring(4, 2) + "." +
                                                              str_date.Substring(6, 2));
                                //dog.dop_date = (DateTime)xlWorkSheet.get_Range("K" + i).Value2;
                            }

                            dog.customer_code = xlWorkSheet.get_Range("L" + i).Value2.ToString();
                            dog.supplier_code = xlWorkSheet.get_Range("P" + i).Value2.ToString();

                            crmCParty cust = GetParty(ses, dog.customer_code);
                            if (cust == null)
                            {
                                new KeyNotFoundException(dog.customer_code);
                            }
                            crmCParty supl = GetParty(ses, dog.supplier_code);
                            if (supl == null)
                            {
                                new KeyNotFoundException(dog.supplier_code);
                            }

                            dog.dep = GetDepartment(ses, dog.dep_code);
                            if (dog.dep == null)
                            {
                                new KeyNotFoundException(dog.dep_code);
                            }

                            dog.reg_dep = GetDepartment(ses, "00-056");
                            if (dog.reg_dep == null)
                            {
                                new KeyNotFoundException("00-056");
                            }

                            dog.reg_staff = GetStaff(ses, dog.staff_code);
                            if (dog.reg_staff == null)
                            {
                                new KeyNotFoundException(dog.staff_code);
                            }

                            crmContract     contract = GetContract(ses, dog);
                            crmContractDeal deal     = new crmDealWithStage(ses);

                            deal.State = DealStates.DEAL_FORMATION;

                            deal.CuratorDepartment     = dog.dep;
                            deal.UserRegistrator       = dog.reg_staff;
                            deal.DepartmentRegistrator = dog.reg_dep;
                            deal.Customer = cust;
                            deal.Supplier = supl;

                            contract.ContractDeals.Add(deal);
                            if (dog.type == "ДОГ")
                            {
                                deal.ContractKind     = ContractKind.CONTRACT;
                                deal.ContractDocument = contract.ContractDocument;
                            }
                            else
                            {
                                deal.ContractKind = ContractKind.ADDENDUM;
                                crmContractDocument contract_document = new crmContractDocument(ses);
                                contract_document.DocumentCategory = GetDocumentCategory(ses, "ДС");
                                contract_document.Number           = dog.dop_num;
                                contract_document.Date             = dog.dop_date;
                                deal.ContractDocument = contract_document;
                                contract.ContractDocuments.Add(contract_document);
                            }

                            System.Console.WriteLine(dog.type + ' ' + dog.dog_id + ' ' + dog.dog_num + ' ' + dog.dog_date + ' ' + dog.customer_code + ' ' + dog.supplier_code);
                            ses.CommitChanges();
                        }
                    }
                }
                catch (Exception e) {
                    if (xlWorkSheet != null)
                    {
                        releaseObject(xlWorkSheet);
                    }
                    if (xlWorkBook != null)
                    {
                        releaseObject(xlWorkBook);
                    }
                    if (xlApp != null)
                    {
                        releaseObject(xlApp);
                    }
                    xlWorkSheet = null;
                    xlWorkBook  = null;
                    xlApp       = null;
                    GC.Collect();
                    System.Console.WriteLine(e);
                    throw e;
                }

                // Закрытие книги
                xlWorkBook.Close(true, misValue, misValue);
                xlApp.Quit();
            }
            if (args[0] == "subject")
            {
                Excel.Application xlApp       = null;
                Excel.Workbook    xlWorkBook  = null;
                Excel.Worksheet   xlWorkSheet = null;

                xlApp = new Excel.ApplicationClass();

                // Открытие документа (книги) excel
                xlWorkBook = xlApp.Workbooks.Open("e:\\subject.xlsx");

                // Выбирается Лист (если существует)
                xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
                //
                try {
                    while (true)
                    {
                        using (UnitOfWork ses = bses.BeginNestedUnitOfWork()) {
                            i++;
                            FinanceTema ft = new FinanceTema();
                            if (xlWorkSheet.get_Range("A" + i).Value2 == null)
                            {
                                break;
                            }
                            ft.dir  = xlWorkSheet.get_Range("A" + i).Value2.ToString();
                            ft.code = xlWorkSheet.get_Range("B" + i).Value2.ToString();
                            ft.name = xlWorkSheet.get_Range("C" + i).Value2.ToString();
                            if (xlWorkSheet.get_Range("D" + i).Value2 != null)
                            {
                                ft.desc = xlWorkSheet.get_Range("D" + i).Value2.ToString();
                            }
                            else
                            {
                                ft.desc = ft.name;
                            }
                            fmCDirection  dir  = GetObject <fmCDirection>(ses, ft.dir);
                            fmCSubjectExt subj = GetObject <fmCSubjectExt>(ses, ft.code);
                            if (subj == null)
                            {
                                subj = new fmCSubjectExt(ses);
                            }
                            subj.Code        = ft.code;
                            subj.Direction   = dir;
                            subj.Name        = ft.name;
                            subj.NameFull    = ft.name;
                            subj.Description = ft.desc;
                            if (subj.Name.Length > 80)
                            {
                                subj.Name = subj.Name.Substring(0, 80);
                            }
                            subj.Save();
                            System.Console.WriteLine(ft.dir + ' ' + ft.code + ' ' + ft.name);
                            ses.CommitChanges();
                        }
                    }
                }
                catch (Exception e) {
                    if (xlWorkSheet != null)
                    {
                        releaseObject(xlWorkSheet);
                    }
                    if (xlWorkBook != null)
                    {
                        releaseObject(xlWorkBook);
                    }
                    if (xlApp != null)
                    {
                        releaseObject(xlApp);
                    }
                    xlWorkSheet = null;
                    xlWorkBook  = null;
                    xlApp       = null;
                    GC.Collect();
                    System.Console.WriteLine(e);
                    throw e;
                }

                // Закрытие книги
                xlWorkBook.Close(true, misValue, misValue);
                xlApp.Quit();
            }
            if (args[0] == "order")
            {
                Excel.Application xlApp       = null;
                Excel.Workbook    xlWorkBook  = null;
                Excel.Worksheet   xlWorkSheet = null;

                xlApp = new Excel.ApplicationClass();

                // Открытие документа (книги) excel
                xlWorkBook = xlApp.Workbooks.Open("e:\\order2.xlsx");

                // Выбирается Лист (если существует)
                xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
                //
                try {
                    while (true)
                    {
                        using (UnitOfWork ses = bses.BeginNestedUnitOfWork()) {
                            i++;
                            FinanceOrder fo = new FinanceOrder();
                            if (xlWorkSheet.get_Range("A" + i).Value2 == null)
                            {
                                break;
                            }
                            if (xlWorkSheet.get_Range("A" + i).Value2 is Double)
                            {
                                fo.buh_int_num = (Int32)((Double)xlWorkSheet.get_Range("A" + i).Value2);
                            }
                            if (xlWorkSheet.get_Range("B" + i).Value2 != null)
                            {
                                fo.buh_account = xlWorkSheet.get_Range("B" + i).Value2.ToString();
                            }
                            else
                            {
                                fo.buh_account = "";
                            }
                            fo.code = xlWorkSheet.get_Range("C" + i).Value2.ToString();
                            if (xlWorkSheet.get_Range("D" + i).Value2 != null)
                            {
                                fo.is_closed = true;
                            }
                            else
                            {
                                fo.is_closed = false;
                            }
                            if (xlWorkSheet.get_Range("E" + i).Value2 != null)
                            {
                                fo.subj = xlWorkSheet.get_Range("E" + i).Value2.ToString();
                            }
                            else
                            {
                                fo.subj = "";
                            }
                            if (xlWorkSheet.get_Range("F" + i).Value2 != null)
                            {
                                fo.name_short = xlWorkSheet.get_Range("F" + i).Value2.ToString();
                            }
                            else
                            {
                                fo.name_short = "";
                            }
                            if (xlWorkSheet.get_Range("G" + i).Value2 != null)
                            {
                                fo.name_full = xlWorkSheet.get_Range("G" + i).Value2.ToString();
                            }
                            else
                            {
                                fo.name_full = "";
                            }
                            if (xlWorkSheet.get_Range("H" + i).Value2 != null)
                            {
                                fo.desc = xlWorkSheet.get_Range("H" + i).Value2.ToString();
                            }
                            else
                            {
                                fo.desc = "";
                            }
                            if (xlWorkSheet.get_Range("I" + i).Value2 != null)
                            {
                                fo.data_from = xlWorkSheet.get_Range("I" + i).Value2.ToString();
                            }
                            else
                            {
                                fo.data_from = "";
                            }
                            if (xlWorkSheet.get_Range("J" + i).Value2 != null)
                            {
                                fo.data_to = xlWorkSheet.get_Range("J" + i).Value2.ToString();
                            }
                            else
                            {
                                fo.data_to = "";
                            }
                            if (xlWorkSheet.get_Range("K" + i).Value2 != null)
                            {
                                fo.base_doc = xlWorkSheet.get_Range("K" + i).Value2.ToString();
                            }
                            else
                            {
                                fo.base_doc = "";
                            }
                            if (xlWorkSheet.get_Range("L" + i).Value2 != null)
                            {
                                fo.work_type = xlWorkSheet.get_Range("L" + i).Value2.ToString();
                            }
                            else
                            {
                                fo.work_type = "";
                            }
                            if (xlWorkSheet.get_Range("M" + i).Value2 != null)
                            {
                                fo.finans = xlWorkSheet.get_Range("M" + i).Value2.ToString();
                            }
                            else
                            {
                                fo.finans = "";
                            }
                            if (xlWorkSheet.get_Range("N" + i).Value2 != null)
                            {
                                fo.source = xlWorkSheet.get_Range("N" + i).Value2.ToString();
                            }
                            else
                            {
                                fo.source = "";
                            }
                            if (xlWorkSheet.get_Range("O" + i).Value2 != null)
                            {
                                fo.army = xlWorkSheet.get_Range("O" + i).Value2.ToString();
                            }
                            else
                            {
                                fo.army = "";
                            }
                            if (xlWorkSheet.get_Range("P" + i).Value2 != null)
                            {
                                fo.nds_mode = xlWorkSheet.get_Range("P" + i).Value2.ToString();
                            }
                            else
                            {
                                fo.nds_mode = "";
                            }
                            if (xlWorkSheet.get_Range("Q" + i).Value2 != null)
                            {
                                fo.acc_mode = xlWorkSheet.get_Range("Q" + i).Value2.ToString();
                            }
                            else
                            {
                                fo.acc_mode = "";
                            }
                            if (xlWorkSheet.get_Range("R" + i).Value2 != null)
                            {
                                if (xlWorkSheet.get_Range("R" + i).Value2 is Double)
                                {
                                    fo.koeff_ozm = (Decimal)((Double)xlWorkSheet.get_Range("R" + i).Value2);
                                }
                            }
                            if (xlWorkSheet.get_Range("S" + i).Value2 != null)
                            {
                                if (xlWorkSheet.get_Range("S" + i).Value2 is Double)
                                {
                                    fo.koeff_kb = (Decimal)((Double)xlWorkSheet.get_Range("S" + i).Value2);
                                }
                            }
                            fmCSubjectExt subj = GetObject <fmCSubjectExt>(ses, fo.subj);
                            fmCOrderExt   ord  = GetObject <fmCOrderExt>(ses, fo.code);
                            if (ord == null)
                            {
                                ord        = new fmCOrderExt(ses);
                                ord.Status = fmIOrderStatus.Loaded;
                            }
                            ord.Code        = fo.code;
                            ord.Subject     = subj;
                            ord.IsClosed    = fo.is_closed;
                            ord.Name        = fo.name_short;
                            ord.NameFull    = fo.name_full;
                            ord.Description = fo.desc;
                            if (!String.IsNullOrEmpty(fo.data_from))
                            {
                                ord.DateBegin = new DateTime(Int32.Parse(fo.data_from.Substring(0, 4)),
                                                             Int32.Parse(fo.data_from.Substring(4, 2)),
                                                             Int32.Parse(fo.data_from.Substring(6, 2)));
                            }
                            if (!String.IsNullOrEmpty(fo.data_to))
                            {
                                ord.DateEnd = new DateTime(Int32.Parse(fo.data_to.Substring(0, 4)),
                                                           Int32.Parse(fo.data_to.Substring(4, 2)),
                                                           Int32.Parse(fo.data_to.Substring(6, 2)));
                            }
                            if (!String.IsNullOrEmpty(fo.acc_mode))
                            {
                                ord.AnalitycAccouterType = GetObject <fmСOrderAnalitycAccouterType>(ses, fo.acc_mode);
                            }
                            if (!String.IsNullOrEmpty(fo.nds_mode))
                            {
                                ord.AnalitycAVT = GetObject <fmСOrderAnalitycAVT>(ses, fo.nds_mode);
                            }
                            ord.BuhAccount  = fo.buh_account;
                            ord.BuhIntNum   = fo.buh_int_num;
                            ord.KoeffKB     = fo.koeff_kb;
                            ord.KoeffOZM    = fo.koeff_ozm;
                            ord.SourceOther = fo.base_doc;
                            //                                ord.
                            if (!String.IsNullOrEmpty(fo.work_type))
                            {
                                ord.AnalitycWorkType = GetObject <fmСOrderAnalitycWorkType>(ses, fo.work_type);
                            }
                            if (!String.IsNullOrEmpty(fo.acc_mode))
                            {
                                ord.AnalitycFinanceSource = GetObject <fmСOrderAnalitycFinanceSource>(ses, fo.finans);
                            }
                            if (!String.IsNullOrEmpty(fo.acc_mode))
                            {
                                ord.AnalitycOrderSource = GetObject <fmСOrderAnalitycOrderSource>(ses, fo.source);
                            }
                            if (!String.IsNullOrEmpty(fo.acc_mode))
                            {
                                ord.AnalitycMilitary = GetObject <fmСOrderAnalitycMilitary>(ses, fo.army);
                            }
                            System.Console.WriteLine(fo.subj + ' ' + fo.code + ' ' + fo.name_short);
                            ses.CommitChanges();
                        }
                    }
                }
                catch (Exception e) {
                    if (xlWorkSheet != null)
                    {
                        releaseObject(xlWorkSheet);
                    }
                    if (xlWorkBook != null)
                    {
                        releaseObject(xlWorkBook);
                    }
                    if (xlApp != null)
                    {
                        releaseObject(xlApp);
                    }
                    xlWorkSheet = null;
                    xlWorkBook  = null;
                    xlApp       = null;
                    GC.Collect();
                    System.Console.WriteLine(e);
                    throw e;
                }
                // Закрытие книги
                xlWorkBook.Close(true, misValue, misValue);
                xlApp.Quit();
            }
        }