public ActionResult Create()
        {
            var uManager = HttpContext.GetOwinContext().GetUserManager <ApplicationUserManager>();
            var userInfo = uManager.FindByNameAsync(User.Identity.Name).GetAwaiter().GetResult();
            var model    = new HumDistributionPlan();

            if (userInfo.Companies.Count > 0)
            {
                model.CompanyId = userInfo.Companies.First().Id;
                model.Company   = userInfo.Companies.First();

                var    xmldoc    = new XmlDocument();
                string urlOrigin = "http://www.nbkr.kg/XML/CurrenciesReferenceList.xml";
                string urlFake   = Server.MapPath("~/Doc/CurrenciesReferenceList.xml");
                string url       = urlFake;
                if (ConfigurationManager.AppSettings.AllKeys.Contains("HasInternetConnection") && ConfigurationManager.AppSettings["HasInternetConnection"] == "yes")
                {
                    url = urlOrigin;
                }

                xmldoc.Load(url);

                var xdoc = DocumentExtensions.ToXDocument(xmldoc);

                ViewBag.Currencies = from c in xdoc.Root.Elements()
                                     select c.Attribute("ISOCode").Value;
            }
            else
            {
                return(RedirectToAction("Create", "Companies", new { userId = userInfo.Id, returnUrl = Request.Path }));
            }
            return(View(model));
        }
        public ActionResult DeleteConfirmed(int id)
        {
            HumDistributionPlan humDistributionPlan = db.HumDistributionPlans.Find(id);

            db.HumDistributionPlans.Remove(humDistributionPlan);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
        /*[HttpPost]
         * [ValidateAntiForgeryToken]
         * public ActionResult Create(HttpPostedFileBase FileUpload, [Bind(Include = "Id,CompanyId,Date,CurrencyISOCode")] HumDistributionPlan humDistributionPlan)
         * {
         *  List<string> messages = new List<string>();
         *  var planItems = new List<HumDistributionPlanItem>();
         *  if (ModelState.IsValid)
         *  {
         *      if (FileUpload != null)
         *      {
         *          if (FileUpload.ContentType == "application/vnd.ms-excel" || FileUpload.ContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
         *          {
         *              string filename = FileUpload.FileName;
         *              string targetpath = Server.MapPath("~/TempDoc/");
         *              FileUpload.SaveAs(targetpath + filename);
         *              string pathToExcelFile = targetpath + filename;
         *              var connectionString = "";
         *              if (filename.EndsWith(".xls"))
         *              {
         *                  connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", pathToExcelFile);
         *              }
         *              else if (filename.EndsWith(".xlsx"))
         *              {
         *                  connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", pathToExcelFile);
         *              }
         *              string sheetName = "План распределения";
         *              var adapter = new OleDbDataAdapter("SELECT * FROM [" + sheetName + "$]", connectionString);
         *              var ds = new DataSet();
         *
         *              adapter.Fill(ds, "ExcelTable");
         *
         *              DataTable dtable = ds.Tables["ExcelTable"];
         *
         *
         *
         *              var excelFile = new ExcelQueryFactory(pathToExcelFile);
         *              var humDistributionPlanItems = from a in excelFile.Worksheet<HumDistributionPlanItemModel>(sheetName) select a;
         *              var units = db.UnitTypes.ToList();
         *
         *              foreach (var item in humDistributionPlanItems)
         *              {
         *                  try
         *                  {
         *                      var unitStr = item.Unit;
         *
         *                      var unitType = units.FirstOrDefault(x => x.Name.ToLower() == unitStr.ToLower());
         *                      if (item.Consumer != "" &&
         *                          item.Address != "" &&
         *                          item.Region != "" &&
         *                          item.ProductName != "" &&
         *                          item.Unit != "" &&
         *                          item.Amount != null &&
         *                          item.Sum != null &&
         *                          unitType != null)
         *                      {
         *                          HumDistributionPlanItem objItem = new HumDistributionPlanItem();
         *                          objItem.Consumer = item.Consumer;
         *                          objItem.Address = item.Address;
         *                          objItem.Region = item.Region;
         *                          objItem.ProductName = item.ProductName;
         *                          objItem.Amount = item.Amount;
         *                          objItem.Sum = item.Sum;
         *                          objItem.UnitTypeId = unitType.Id;
         *
         *                          planItems.Add(objItem);
         *                      }
         *                      else
         *                      {
         *                          if (item.Consumer == "" || item.Consumer == null) messages.Add("Поле Consumer не может быть пустым");
         *                          if (item.Region == "" || item.Region == null) messages.Add("Поле Region не может быть пустым");
         *                          if (item.ProductName == "" || item.ProductName == null) messages.Add("Поле ProductName не может быть пустым");
         *                          if (item.Amount == null) messages.Add("Поле Amount не может быть пустым");
         *                          if (item.Sum == null) messages.Add("Поле Sum не может быть пустым");
         *                          if (unitType == null) messages.Add("Поле Unit не может быть пустым, или оно не найдено в справочнике");
         *                      }
         *                  }
         *
         *                  catch (DbEntityValidationException ex)
         *                  {
         *                      foreach (var entityValidationErrors in ex.EntityValidationErrors)
         *                      {
         *
         *                          foreach (var validationError in entityValidationErrors.ValidationErrors)
         *                          {
         *
         *                              Response.Write("Свойство: " + validationError.PropertyName + " Текст ошибки: " + validationError.ErrorMessage);
         *
         *                          }
         *
         *                      }
         *                  }
         *              }
         *              //deleting excel file from folder
         *              if ((System.IO.File.Exists(pathToExcelFile)))
         *              {
         *                  System.IO.File.Delete(pathToExcelFile);
         *              }
         *          }
         *          else
         *          {
         *              messages.Add("Только Excel-формат доступен.");
         *          }
         *      }
         *
         *      if (messages.Count == 0)
         *      {
         *          db.Database.BeginTransaction();
         *          try
         *          {
         *              db.HumDistributionPlans.Add(humDistributionPlan);
         *              db.SaveChanges();
         *              foreach (var item in planItems)
         *              {
         *                  item.HumDistributionPlanId = humDistributionPlan.Id;
         *                  db.HumDistributionPlanItems.Add(item);
         *                  db.SaveChanges();
         *              }
         *              db.Database.CurrentTransaction.Commit();
         *              return RedirectToAction("Details", new { id = humDistributionPlan.Id });
         *          }
         *          catch (Exception e)
         *          {
         *              messages.Add("Error on saving items: " + e.Message);
         *              db.Database.CurrentTransaction.Rollback();
         *          }
         *          finally
         *          {
         *              db.Database.Connection.Close();
         *          }
         *      }
         *  }
         *  ViewBag.Messages = messages.ToArray();
         *  humDistributionPlan.Company = db.Companies.Find(humDistributionPlan.CompanyId);
         *
         *
         *  var xmldoc = new XmlDocument();
         *  string urlOrigin = "http://www.nbkr.kg/XML/CurrenciesReferenceList.xml";
         *  string urlFake = Server.MapPath("~/Doc/CurrenciesReferenceList.xml");
         *  string url = urlFake;
         *  if (ConfigurationManager.AppSettings.AllKeys.Contains("HasInternetConnection") && ConfigurationManager.AppSettings["HasInternetConnection"] == "yes")
         *      url = urlOrigin;
         *
         *  xmldoc.Load(url);
         *
         *  var xdoc = DocumentExtensions.ToXDocument(xmldoc);
         *
         *  ViewBag.Currencies = from c in xdoc.Root.Elements()
         *                       select c.Attribute("ISOCode").Value;
         *
         *  return View(humDistributionPlan);
         * }
         */
        public ActionResult CreateWithRows()
        {
            var uManager = HttpContext.GetOwinContext().GetUserManager <ApplicationUserManager>();
            var userInfo = uManager.FindByNameAsync(User.Identity.Name).GetAwaiter().GetResult();
            var model    = new HumDistributionPlan {
                Items = new List <HumDistributionPlanItem> {
                    new HumDistributionPlanItem()
                }
            };

            if (userInfo.Companies.Count > 0)
            {
                model.CompanyId = userInfo.Companies.First().Id;
                model.Company   = userInfo.Companies.First();

                var    xmldoc    = new XmlDocument();
                string urlOrigin = "http://www.nbkr.kg/XML/CurrenciesReferenceList.xml";
                string urlFake   = Server.MapPath("~/Doc/CurrenciesReferenceList.xml");
                string url       = urlFake;
                if (ConfigurationManager.AppSettings.AllKeys.Contains("HasInternetConnection") && ConfigurationManager.AppSettings["HasInternetConnection"] == "yes")
                {
                    url = urlOrigin;
                }

                xmldoc.Load(url);

                var xdoc = DocumentExtensions.ToXDocument(xmldoc);

                ViewBag.CurrencyISOCode = from c in xdoc.Root.Elements()
                                          select new SelectListItem {
                    Text = " " + c.Attribute("ISOCode").Value + " ", Value = c.Attribute("ISOCode").Value
                };

                var consumers = db.Consumers.ToList();
                consumers.Insert(0, new Consumer());
                ViewBag.ConsumerId = new SelectList(consumers, "Id", "Name");

                var products = db.Products.ToList();
                products.Insert(0, new Product());
                ViewBag.ProductId = new SelectList(products, "Id", "Name");

                var areas = db.Areas.ToList();
                areas.Insert(0, new Area());
                ViewBag.AreaId = new SelectList(areas, "Id", "Name");

                var unitTypes = db.UnitTypes.ToList();
                unitTypes.Insert(0, new UnitType());
                ViewBag.UnitTypeId = new SelectList(unitTypes, "Id", "Name");
            }
            else
            {
                return(RedirectToAction("Create", "Companies", new { userId = userInfo.Id, returnUrl = Request.Path }));
            }
            return(View(model));
        }
        void SendToCissa(HumDistributionPlan obj)
        {
            var HumDistributionPlanDefId     = new Guid("{8C9BC637-06E2-4AE7-ACD8-F498C1CA1620}");
            var HumDistributionPlanItemDefId = new Guid("{EAA7299C-E4AF-4203-8D18-1733F639F902}");
            var portalStateTypeId            = new Guid("{D6D8589D-46EF-4323-B25F-BE312260F1BB}");
            var positionId = new Guid("{DF1C36BB-85B0-4C53-8729-F18A5D6615F4}");

            if (obj.Company != null)
            {
                var company = obj.Company;

                var cissameta          = new CissaMeta.MetaProxy();
                var cissa_portal_users = cissameta.GetUsersByPositionId(positionId, company.OrgId ?? Guid.Empty);
                if (cissa_portal_users != null && cissa_portal_users.Count() > 0)
                {
                    var user      = cissa_portal_users.First();
                    var context   = CreateContext(user.User_Name, user.Id);
                    var docRepo   = context.Documents;
                    var reportDoc = docRepo.New(HumDistributionPlanDefId);
                    reportDoc["RegDate"]         = obj.Date;
                    reportDoc["LegalPerson"]     = GetLegalPerson(context, obj);
                    reportDoc["PortalEntryId"]   = obj.Id;
                    reportDoc["CurrencyISOCode"] = obj.CurrencyISOCode;
                    reportDoc["TotalSum"]        = obj.Items.Sum(x => x.Sum);
                    docRepo.Save(reportDoc);
                    docRepo.SetDocState(reportDoc, portalStateTypeId);

                    foreach (var objItem in obj.Items)
                    {
                        var item = docRepo.New(HumDistributionPlanItemDefId);
                        item["HumDistributionPlan"] = reportDoc.Id;
                        item["Consumer"]            = objItem.Consumer.Name;
                        item["Region"]      = objItem.Area.Name;
                        item["Address"]     = objItem.Address;
                        item["ProductName"] = objItem.Product.Name;
                        item["Unit"]        = objItem.UnitType.EnumId;
                        item["Amount"]      = objItem.Amount;
                        //item["Weight"] = objItem.Weight;
                        item["Sum"] = objItem.Sum;
                        docRepo.Save(item);
                    }
                }
                else
                {
                    throw new ArgumentNullException(paramName: "cissa_portal_users", message: "Пользователь не найден!");
                }
            }
            else
            {
                throw new ArgumentNullException(paramName: "Report.Company", message: "Компания не найдена!");
            }
        }
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            HumDistributionPlan humDistributionPlan = db.HumDistributionPlans.Find(id);

            if (humDistributionPlan == null)
            {
                return(HttpNotFound());
            }
            return(View(humDistributionPlan));
        }
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            HumDistributionPlan humDistributionPlan = db.HumDistributionPlans
                                                      .Include(x => x.PlanStates.Select(x1 => x1.DocumentState))
                                                      .Include(x => x.Items.Select(x1 => x1.Product))
                                                      .Include(x => x.Attachments.Select(x1 => x1.AttachmentType))
                                                      .Include(x => x.Items.Select(x1 => x1.HumDistributionPlanItemChanges))
                                                      .FirstOrDefault(x => x.Id == id);

            if (humDistributionPlan == null)
            {
                return(HttpNotFound());
            }
            return(View(humDistributionPlan));
        }
        Guid GetLegalPerson(WorkflowContext context, HumDistributionPlan obj)
        {
            var LegalPersonDefId = new Guid("{61AF4CEA-D77A-4305-8F0A-81A001BE5CFD}");

            var qb    = new QueryBuilder(LegalPersonDefId, context.UserId);
            var query = context.CreateSqlQuery(qb.Def);

            query.AndCondition("PIN", ConditionOperation.Equal, obj.Company.INN);
            query.AndCondition("LegalName", ConditionOperation.Equal, obj.Company.Name);

            query.AddAttribute("&Id");
            using (var reader = context.CreateSqlReader(query))
            {
                if (reader.Read())
                {
                    return(reader.GetGuid(0));
                }
            }
            var docRepo        = context.Documents;
            var newLegalPerson = docRepo.New(LegalPersonDefId);

            newLegalPerson["PIN"]            = obj.Company.INN;
            newLegalPerson["LegalName"]      = obj.Company.Name;
            newLegalPerson["CodeOrg"]        = obj.Company.OKPO;
            newLegalPerson["LegalAddress"]   = obj.Company.Address;
            newLegalPerson["LegalPhone"]     = obj.Company.Telephone;
            newLegalPerson["Email"]          = obj.Company.Email;
            newLegalPerson["TypeOfActivity"] = obj.Company.ActivityType;
            newLegalPerson["BankName"]       = obj.Company.BankName;
            newLegalPerson["BankIdCode"]     = obj.Company.BIK;
            newLegalPerson["CheckAccount"]   = obj.Company.BankAccountNo;

            docRepo.Save(newLegalPerson);

            return(newLegalPerson.Id);
        }
        public ActionResult CreateWithRows([Bind(Include = "CompanyId,Date,CurrencyISOCode,Items")] HumDistributionPlan plan)
        {
            if (plan.Items == null)
            {
                ModelState.AddModelError("", "Добавьте строки");
            }
            else
            {
                foreach (var item in plan.Items)
                {
                    if (item.ConsumerId == 0)
                    {
                        ModelState.AddModelError("", "Потребитель не указан");
                    }
                    if (item.AreaId == 0)
                    {
                        ModelState.AddModelError("", "Область не указана");
                    }
                    if (item.ProductId == 0)
                    {
                        ModelState.AddModelError("", "Товар / Продукт / Изделие не указано");
                    }
                    if (item.UnitTypeId == 0)
                    {
                        ModelState.AddModelError("", "Ед. измерения не указана");
                    }
                    if (item.Amount <= 0)
                    {
                        ModelState.AddModelError("", "Кол-во не задано");
                    }
                    if (item.Sum <= 0)
                    {
                        ModelState.AddModelError("", "Сумма не задана");
                    }
                }
            }
            if (ModelState.IsValid)
            {
                var humPlan = new HumDistributionPlan
                {
                    CompanyId       = plan.CompanyId,
                    CurrencyISOCode = plan.CurrencyISOCode,
                    Date            = plan.Date
                };
                db.HumDistributionPlans.Add(humPlan);
                foreach (var planItem in plan.Items)
                {
                    planItem.HumDistributionPlanId = humPlan.Id;
                    db.HumDistributionPlanItems.Add(planItem);
                }
                db.SaveChanges();
                return(RedirectToAction("Details", new { id = humPlan.Id }));
            }
            plan.Company = db.Companies.Find(plan.CompanyId);
            plan.Items   = plan.Items == null ? new List <HumDistributionPlanItem>() : plan.Items;

            var    xmldoc    = new XmlDocument();
            string urlOrigin = "http://www.nbkr.kg/XML/CurrenciesReferenceList.xml";
            string urlFake   = Server.MapPath("~/Doc/CurrenciesReferenceList.xml");
            string url       = urlFake;

            if (ConfigurationManager.AppSettings.AllKeys.Contains("HasInternetConnection") && ConfigurationManager.AppSettings["HasInternetConnection"] == "yes")
            {
                url = urlOrigin;
            }

            xmldoc.Load(url);

            var xdoc = DocumentExtensions.ToXDocument(xmldoc);

            ViewBag.CurrencyISOCode = from c in xdoc.Root.Elements()
                                      select new SelectListItem {
                Text = " " + c.Attribute("ISOCode").Value + " ", Value = c.Attribute("ISOCode").Value, Selected = c.Attribute("ISOCode").Value == plan.CurrencyISOCode
            };

            var consumers = db.Consumers.ToList();

            consumers.Insert(0, new Consumer());
            ViewBag.ConsumerId = new SelectList(consumers, "Id", "Name");

            var products = db.Products.ToList();

            products.Insert(0, new Product());
            ViewBag.ProductId = new SelectList(products, "Id", "Name");

            var areas = db.Areas.ToList();

            areas.Insert(0, new Area());
            ViewBag.AreaId = new SelectList(areas, "Id", "Name");

            var unitTypes = db.UnitTypes.ToList();

            unitTypes.Insert(0, new UnitType());
            ViewBag.UnitTypeId = new SelectList(unitTypes, "Id", "Name");

            return(View(plan));
        }