Esempio n. 1
0
        public ActionResult _InsertPerson(int workerWorkplaceId, int StorageNameId)
        {
            Organization    currentOrg = organizationRepository.Get(getIntCurrentEnterpriseId());
            WorkerWorkplace wp         = workerWorkplaceRepository.Get(workerWorkplaceId);

            if (wp != null && wp.RootOrganization == currentOrg.Id)
            {
                StorageName currentStorageName          = storageNameRepository.Get(StorageNameId);
                Dictionary <string, object> queryParams = new Dictionary <string, object>();
                queryParams.Add("Organization", currentOrg);
                queryParams.Add("Worker", wp.Worker);
                queryParams.Add("StorageName", currentStorageName);
                MatPersonCardHead person = matPersonCardHeadRepository.FindOne(queryParams);
                if (person == null)
                {
                    person = new MatPersonCardHead();
                    person.Organization = currentOrg;
                    person.Worker       = wp.Worker;
                }

                /*
                 * if (person.StorageName != currentStorageName)
                 *  ModelState.AddModelError("","Этот сотрудник уже числится на складе: " + currentStorageName.Name);
                 * else
                 * {*/
                person.IsActive    = true;
                person.Department  = wp.Organization.Parent;
                person.StorageName = currentStorageName;
                matPersonCardHeadRepository.SaveOrUpdate(person);
                //}
            }
            return(View(new GridModel(new List <MatPersonCardHead>())));
        }
Esempio n. 2
0
        public void SaveOnStorage(HttpResponseBase response, String date, int storageNameId, IEnumerable <HttpPostedFileBase> attachments)
        {
            // The Name of the Upload component is "attachments"
            IFormatProvider culture     = new System.Globalization.CultureInfo("ru-RU", true);
            StorageName     storageName = storageNameRepository.Get(storageNameId);

            if (storageName == null)
            {
                response.Write("Выбранный склад не найден в БД!<br/>");
                response.Flush();
                return;
            }
            DateTime remaindDate;

            DateTime.TryParseExact(date, DataGlobals.DATE_FORMAT_FULL_YEAR, null, System.Globalization.DateTimeStyles.None, out remaindDate);
            if (remaindDate == null)
            {
                response.Write("Ошибка в дате остатков!<br/>");
                response.Flush();
                return;
            }

            foreach (var file in attachments)
            {
                // Some browsers send file names with full path. This needs to be stripped.
                var isError  = false;
                var fileName = Path.GetFileName(file.FileName);
                response.Write("Обрабатывается файл <b>" + fileName + "</b><br/>");
                response.Flush();
                var physicalFilePath = Path.Combine(Server.MapPath("~/TempFiles"), fileName);
                try
                {
                    if (System.IO.File.Exists(physicalFilePath))
                    {
                        System.IO.File.Delete(physicalFilePath);
                    }
                    try
                    {
                        file.SaveAs(physicalFilePath);
                    }
                    catch (Exception e)
                    {
                        response.Write("Ошибка при охранении файла на сервере:<br/>");
                        response.Write(e.Message);
                        response.Flush();
                        isError = true;
                    }
                    System.Data.DataTable table = null;
                    string workSheetNames       = "";
                    if (!isError)
                    {
                        try
                        {
                            ExcelReader excelReader = new ExcelReader(physicalFilePath, true);
                            if (excelReader.workSheetNames.Length > 0)
                            {
                                workSheetNames = excelReader.workSheetNames[0];
                                table          = excelReader.GetWorksheet(workSheetNames);
                            }
                            else
                            {
                                response.Write("В файле не найден рабочий лист!<br/>");
                                response.Flush();
                                isError = true;
                            }
                        }
                        catch (Exception e)
                        {
                            response.Write("Ошибка при открытии файла:<br/>");
                            response.Write(e.Message);
                            response.Flush();
                            isError = true;
                        }
                    }
                    if (table != null)
                    {
                        response.Write("Загрузка данных производится из листа с именем '" + workSheetNames.Trim(new[] { '$' }) + "'<br/>");
                        response.Flush();
                        //if (!table.Columns.Contains("Код склада"))
                        //{
                        //    response.Write("Файл содержит не коррекные данные ('Код склада').<br/>");
                        //    isError = true;
                        //}
                        if (!table.Columns.Contains("Номенклатурный номер"))
                        {
                            response.Write("Файл содержит не коррекные данные ('Номенклатурный номер').<br/>");
                            response.Flush();
                            isError = true;
                        }
                        if (!table.Columns.Contains("Износ"))
                        {
                            response.Write("Файл содержит не коррекные данные ('Износ').<br/>");
                            response.Flush();
                            isError = true;
                        }
                        if (!table.Columns.Contains("Кол-во"))
                        {
                            response.Write("Файл содержит не коррекные данные ('Кол-во').<br/>");
                            response.Flush();
                            isError = true;
                        }
//                            int colStorage = table.Columns.IndexOf("Код склада");
                        int colNomenclature = table.Columns.IndexOf("Номенклатурный номер");
                        int colWear         = table.Columns.IndexOf("Износ");
                        int colCount        = table.Columns.IndexOf("Кол-во");

                        if (!isError)
                        {
                            //                                    DataRow[] result = table.Select("F2 = '*' and F3=" + storageName.Plant + " and F4 in (" + storageName.StorageNumber + ")");

                            //remaindRepository.TruncRamains(storageNameId, date,null);

                            // Удаление ранее расчитаных остатков
                            //storageRepository.TruncStorage(storageNameId);

                            DataRow[] result = table.Select();
                            Dictionary <string, object> queryParams = new Dictionary <string, object>();
                            int          idOrg      = int.Parse(getCurrentEnterpriseId());
                            Organization currentOrg = organizationRepository.Get(idOrg);
                            foreach (DataRow row in result)     // Loop over the rows.
                            {
                                if (row[colNomenclature] != System.DBNull.Value)
                                {
                                    // Ищем id номенклатуры на руках( сверила все номенклатуры, в справочнике есть все)
                                    queryParams.Clear();
                                    queryParams.Add("Organization", currentOrg);
                                    queryParams.Add("ExternalCode", row[colNomenclature].ToString());
                                    queryParams.Add("IsActive", true);
                                    IList <Nomenclature> nomenclatures = nomenclatureRepository.GetByLikeCriteria(queryParams);
                                    if (nomenclatures.Count == 0)
                                    {
                                        queryParams.Clear();
                                        queryParams.Add("Organization", currentOrg);
                                        queryParams.Add("ExternalCode", row[colNomenclature].ToString());
                                        queryParams.Add("IsActive", false);
                                        nomenclatures = nomenclatureRepository.GetByLikeCriteria(queryParams);
                                        if (nomenclatures.Count == 0)
                                        {
                                            response.Write("Номенклатура с № " + row[colNomenclature].ToString() + " не найдена в системе!<br/>");
                                            response.Flush();
                                            continue;
                                        }
                                    }

                                    int quantity = 0;
                                    if (!int.TryParse(row[colCount].ToString(), out quantity))
                                    {
                                        response.Write("У номенклатуры " + row[colNomenclature] + " ошибка в кол-ве!<br/>");
                                        response.Flush();
                                        continue;
                                    }


                                    string wear = row[colWear].ToString();
                                    if ((wear != "100") && (wear != "50"))
                                    {
                                        response.Write("У номенклатуры " + row[colNomenclature] + " ошибка в износе! Допустимые изачения 100 или 50. <br/>");
                                        response.Flush();
                                        continue;
                                    }

                                    // Ищем есть ли подобная позиция на складе (номенклатура+рост+размер), считаем, что % годностиу всех 100
                                    // Если не находим, то добавляем запись на склад с нулевым кол-вом
                                    queryParams.Clear();
                                    queryParams.Add("StorageName", storageName);
                                    queryParams.Add("Nomenclature", nomenclatures[0]);
                                    queryParams.Add("Wear", wear);
                                    //Storage storage = storageRepository.FindOne(queryParams);
                                    IList <Storage> storages = storageRepository.GetByLikeCriteria(queryParams);
                                    Storage         storage  = null;
                                    if (storages.Count > 0)
                                    {
                                        storage = storages[0];
                                    }

                                    if (storage == null)
                                    {
                                        storage              = new Storage();
                                        storage.StorageName  = storageName;
                                        storage.Nomenclature = nomenclatures[0];
                                        storage.Quantity     = quantity;
                                        storage.Wear         = wear;
                                        storageRepository.SaveOrUpdate(storage);
                                    }
                                    else
                                    {
                                        storage.Quantity = storage.Quantity + quantity;
                                    }
                                    storage.NomBodyPartSize = nomenclatures[0].NomBodyPartSize;
                                    storage.Growth          = nomenclatures[0].Growth;

                                    Remaind remaind = new Remaind();
                                    remaind.Growth          = nomenclatures[0].Growth;
                                    remaind.Nomenclature    = nomenclatures[0];
                                    remaind.Quantity        = quantity;
                                    remaind.Wear            = int.Parse(wear);
                                    remaind.StorageName     = storageName;
                                    remaind.RemaindDate     = remaindDate;
                                    remaind.NomBodyPartSize = nomenclatures[0].NomBodyPartSize;
                                    remaind.ActualDate      = DateTime.Now;

                                    try
                                    {
                                        storageRepository.DbContext.BeginTransaction();
                                        storageRepository.SaveOrUpdate(storage);
                                        remaind.Storage = storage;
                                        remaindRepository.SaveOrUpdate(remaind);
                                        storageRepository.DbContext.CommitTransaction();
                                    }
                                    catch (Exception e)
                                    {
                                        isError = true;
                                        response.Write("Для номенклатуры " + row[colNomenclature] + " произошла ошибка при сохранении данных в БД:<br/>");
                                        response.Write(e.Message);
                                        response.Write("<br/>");
                                        if (e.InnerException != null)
                                        {
                                            response.Write(e.InnerException.Message);
                                            response.Write("<br/>");
                                        }
                                        response.Flush();
                                        storageRepository.DbContext.RollbackTransaction();
                                    }
                                }
                            }
                            response.Flush();
                        }
                        response.Flush();
                    }
                    if (!isError)
                    {
                        response.Write("Файл успешно обработан!");
                    }
                }
                finally
                {
                    System.IO.File.Delete(physicalFilePath);
                }
            }
        }
        public ActionResult _TransferWorkerCard(int?workerWorkplaceId, int storageNameId, string listId, Boolean outNorma, string OperDate)
        {
            DateTime operDate;

            DateTime.TryParseExact(OperDate, DataGlobals.DATE_FORMAT, null, System.Globalization.DateTimeStyles.None, out operDate);
            ResultState resultState = new ResultState();

            resultState.Status = ResultState.OK;
            if (workerWorkplaceId != null)
            {
                Dictionary <string, object> query = new Dictionary <string, object>();
                Dictionary <string, object> order = new Dictionary <string, object>();
                query.Add("Worker.Id", workerWorkplaceId);
                query.Add("IsActive", true);
                order.Add("Storage.StorageName.Id", storageNameId);
                //Выбираем активные рабочие места
                IList <WorkerWorkplace> workerWorkplaces = workerWorkplaceRepository.GetByLikeCriteria(query);
                if (workerWorkplaces.Count == 1)
                {
                    WorkerWorkplace ww = workerWorkplaces[0];
                    //Выбираем активные рабочие места
                    // Запрет на одевание работника в салоне к которому он не приписан. Пока закомментировала, т.к. не уверена, что не будет последствий

                    /*
                     * if (ww.Organization.StorageName.Id != storageNameId)
                     * {
                     *  resultState.Status = ResultState.ERROR;
                     *  resultState.setMessage("НЕЛЬЗЯ ВЫПОЛНИТЬ ПЕРЕВОД!!! Работник приписан к складу " + ww.Organization.StorageName.StorageNumber);
                     * }
                     */
                    string   periodDateStr  = getConfigParamValue(configRepository, "periodDate", getCurrentEnterpriseId());
                    string   periodIsClosed = getConfigParamValue(configRepository, "periodIsClosed", getCurrentEnterpriseId());
                    DateTime periodDate;
                    DateTime.TryParseExact(periodDateStr, DataGlobals.DATE_FORMAT_FULL_YEAR, null, System.Globalization.DateTimeStyles.None, out periodDate);

                    // проверка на закрытие периода
                    if (periodIsClosed != null && periodIsClosed.Equals("1") && periodDate > operDate)
                    {
                        resultState.Status = ResultState.ERROR;
                        resultState.setMessage(OperDate + ": Период закрыт для изменений");
                    }

                    if (resultState.Status == ResultState.OK)
                    {
                        query.Clear();
                        query.Add("WorkerWorkplace", ww);
                        WorkerCardHead newWorkerCardHead = workerCardRepository.FindOne(query);
                        if (newWorkerCardHead == null)
                        {
                            newWorkerCardHead = new WorkerCardHead();
                            newWorkerCardHead.WorkerWorkplace = ww;
                        }
                        query.Clear();
                        query.Add("Organization", ww.Organization);
                        query.Add("Norma.Organization.Id", int.Parse(getCurrentEnterpriseId()));
                        query.Add("Norma.IsActive", true);
                        IList <NormaOrganization>  normaOrganizations = normaOrganizationRepository.GetByCriteria(query);
                        IList <NomenclatureSimple> list = getNomenclaturesByParam(listId);
                        string docNumber = "00000";
                        // Убрала ниже, чтобы можно было изменять номер документа
                        docNumber = operationRepository.GetNextDocNumber(DataGlobals.OPERATION_STORAGE_TRANSFER_OUT, getCurrentEnterpriseId());
                        int?skladId = null;
                        foreach (var item in list)
                        {
                            ResultState listResultState = new ResultState();
                            listResultState.Status = ResultState.OK;

                            WorkerCardContent oldWorkerCardContent = workerCardContentRepository.Get(item.Id);
                            if (skladId != null && skladId != oldWorkerCardContent.Storage.StorageName.Id)
                            {
                                docNumber = operationRepository.GetNextDocNumber(DataGlobals.OPERATION_STORAGE_TRANSFER_OUT, getCurrentEnterpriseId());
                            }

                            if (oldWorkerCardContent.StartDate >= operDate)
                            {
                                listResultState.Status = ResultState.ERROR;
                                listResultState.setMessage(item.Name + "   Дата перевода раньше даты выдачи!!! Введите текущую дату!");

                                resultState.Status = ResultState.ERROR;
                                resultState.setMessage(item.Name + "   Дата перевода раньше даты выдачи!!! Введите текущую дату!");
                            }

                            NormaContent newNormaContent = GetNewNormaContent(normaOrganizations, item.GroupId);
                            // Если на новом рабочем месте номенклатура не подходит по норме и выбрана опция
                            //Ставим старую норму
                            //Закомментировано, т.к. по просьбе УПУ не нужно переносить на руки, то что не по норме
                            if (newNormaContent == null && outNorma == true)
                            {
                                newNormaContent = oldWorkerCardContent.NormaContent;
                            }
//                        if (newNormaContent != null )
                            if (newNormaContent == null && outNorma != true)
                            {
                                listResultState.Status = ResultState.ERROR;
                                listResultState.setMessage(item.Name + " НЕ СООТВЕТСТВУЕТ новой норме. Выполните ВОЗВРАТ или СПИСАНИЕ по акту!");

                                resultState.Status = ResultState.ERROR;
                                resultState.setMessage(item.Name + " НЕ СООТВЕТСТВУЕТ новой норме. Выполните ВОЗВРАТ или СПИСАНИЕ по акту!");
                            }
                            else
                            {
                                Storage storageTo = null;
                                //Выбранный склад и склад номенклатуры совпадают
                                if (oldWorkerCardContent.Storage.StorageName.Id == storageNameId)
                                {
                                    storageTo = oldWorkerCardContent.Storage;
                                }
                                //Выбранный склад и склад номенклатуры не совпадают
                                else
                                {
                                    //Пытаемся найти номенклатуру на другом складе
                                    StorageName storageName = storageNameRepository.Get(storageNameId);
                                    if (storageName == null)
                                    {
                                        listResultState.Status = ResultState.ERROR;
                                        listResultState.setMessage("В справочнике не найден склад с идентификатором " + storageNameId + "!");

                                        resultState.Status = ResultState.ERROR;
                                        resultState.setMessage("В справочнике не найден склад с идентификатором " + storageNameId + "!");
                                    }
                                    if (listResultState.Status == ResultState.OK)
                                    {
                                        query.Clear();
                                        query.Add("Nomenclature", oldWorkerCardContent.Storage.Nomenclature);
                                        query.Add("StorageName", storageName);
                                        if (oldWorkerCardContent.Storage.Wear == null)
                                        {
                                            query.Add("[]Wear", "");
                                        }
                                        else
                                        {
                                            query.Add("Wear", oldWorkerCardContent.Storage.Wear);
                                        }
                                        if (oldWorkerCardContent.Storage.Growth == null)
                                        {
                                            query.Add("[]Growth", "");
                                        }
                                        else
                                        {
                                            query.Add("Growth", oldWorkerCardContent.Storage.Growth);
                                        }
                                        if (oldWorkerCardContent.Storage.NomBodyPartSize == null)
                                        {
                                            query.Add("[]NomBodyPartSize", "");
                                        }
                                        else
                                        {
                                            query.Add("NomBodyPartSize", oldWorkerCardContent.Storage.NomBodyPartSize);
                                        }
                                        IList <Storage> storages = storageRepository.GetByLikeCriteria(query);
                                        if (storages.Count > 0)
                                        {
                                            storageTo = storages[0];
                                        }
                                        else
                                        {
                                            //На новом складе не нашлась номенклатура
                                            storageTo                 = new Storage();
                                            storageTo.StorageName     = storageName;
                                            storageTo.Nomenclature    = oldWorkerCardContent.Storage.Nomenclature;
                                            storageTo.Quantity        = 0;
                                            storageTo.Price           = oldWorkerCardContent.Storage.Price;
                                            storageTo.Growth          = oldWorkerCardContent.Storage.Growth;
                                            storageTo.NomBodyPartSize = oldWorkerCardContent.Storage.NomBodyPartSize;
                                            storageTo.Wear            = oldWorkerCardContent.Storage.Wear;
                                            storageRepository.SaveOrUpdate(storageTo);
                                        }
                                    }
                                }
//                            if (resultState.Status == ResultState.OK)
                                if (listResultState.Status == ResultState.OK)

                                {
                                    //Создаем операцию на перевод по старому месту работы
                                    Operation oldOperation = new Operation();
                                    oldOperation.WorkerWorkplace = oldWorkerCardContent.WorkerCardHead.WorkerWorkplace;
                                    oldOperation.OperDate        = operDate; //DateTime.Now;
                                    oldOperation.Quantity        = oldWorkerCardContent.Quantity;
                                    oldOperation.OperType        = operTypeRepository.Get(DataGlobals.OPERATION_STORAGE_TRANSFER_OUT);
                                    oldOperation.Organization    = organizationRepository.Get(int.Parse(getCurrentEnterpriseId()));
                                    oldOperation.DocNumber       = docNumber;
                                    oldOperation.GiveOperation   = oldWorkerCardContent.GiveOperation;
                                    //oldOperation.DocDate=
                                    query.Clear();
                                    query.Add("OperType", oldOperation.OperType);
                                    IList <Motiv> motivs = motivRepository.GetByLikeCriteria(query);
                                    if (motivs.Count > 0)
                                    {
                                        oldOperation.Motiv = motivs[0];
                                    }
                                    oldOperation.Storage = oldWorkerCardContent.Storage;

                                    //Создаем операцию на перевод по новому месту работы
                                    Operation newOperation = new Operation();
                                    newOperation.WorkerWorkplace = ww;
                                    newOperation.OperDate        = operDate; //DateTime.Now;
                                    newOperation.Quantity        = oldWorkerCardContent.Quantity;
                                    newOperation.OperType        = operTypeRepository.Get(DataGlobals.OPERATION_STORAGE_TRANSFER_IN);
                                    newOperation.Organization    = organizationRepository.Get(int.Parse(getCurrentEnterpriseId()));
                                    newOperation.DocNumber       = docNumber;
                                    newOperation.GiveOperation   = oldWorkerCardContent.GiveOperation;
                                    //newOperation.DocDate=

                                    motivs.Clear();
                                    query.Clear();
                                    query.Add("OperType", newOperation.OperType);
                                    motivs = motivRepository.GetByLikeCriteria(query);
                                    if (motivs.Count > 0)
                                    {
                                        newOperation.Motiv = motivs[0];
                                    }
                                    newOperation.Storage = storageTo;

                                    newOperation.TransferOperation = oldOperation;
                                    oldOperation.TransferOperation = newOperation;

                                    operationRepository.SaveOrUpdate(oldOperation);
                                    operationRepository.SaveOrUpdate(newOperation);
                                    //Создаем новую карточку
                                    WorkerCardContent newWorkerCardContent = new WorkerCardContent();
                                    newWorkerCardContent.WorkerCardHead = newWorkerCardHead;
                                    newWorkerCardContent.Storage        = storageTo;
                                    newWorkerCardContent.Quantity       = oldWorkerCardContent.Quantity;
                                    newWorkerCardContent.Operation      = newOperation;
                                    newWorkerCardContent.StartDate      = oldWorkerCardContent.StartDate;
                                    newWorkerCardContent.UsePeriod      = oldWorkerCardContent.UsePeriod;
                                    newWorkerCardContent.GiveOperation  = oldWorkerCardContent.GiveOperation;

                                    //Проставляем новую норму!!!
                                    newWorkerCardContent.NormaContent = newNormaContent;
                                    //Обнуляем старую карточку
                                    oldWorkerCardContent.Quantity   = 0;
                                    oldWorkerCardContent.EndDate    = operDate; //DateTime.Now;
                                    oldWorkerCardContent.OperReturn = oldOperation;
                                    //Сохраняем новую и старую карточки
                                    workerCardContentRepository.SaveOrUpdate(oldWorkerCardContent);
                                    workerCardContentRepository.SaveOrUpdate(newWorkerCardContent);
                                }
                            }

                            skladId = oldWorkerCardContent.Storage.StorageName.Id;
                        }
                    }
                }
                else
                {
                    //У человека несколько активных рабочих мест или рабочее место не найдено
                    resultState.Status = ResultState.ERROR;
                    resultState.setMessage("У человека больше одного рабочего места или рабочее место не найдено!");
                }
            }
            return(Json(resultState));
        }
Esempio n. 4
0
        public ActionResult Save(string date, int StorageList, IEnumerable <HttpPostedFileBase> attachments)
        {
            int messCount = 0;

            if (attachments == null)
            {
                Session.Add("messRow" + messCount.ToString(), "Файл для загрузки не выбран");
                messCount++;
            }
            else
            {
                remaindExternalRepository.DbContext.BeginTransaction();
                // The Name of the Upload component is "attachments"
                IFormatProvider culture     = new System.Globalization.CultureInfo("ru-RU", true);
                string          format      = "dd.MM.yyyy";
                DateTime        paramDate   = DateTime.ParseExact(date, format, culture);
                StorageName     storageName = storageNameRepository.Get(StorageList);
                remaindExternalRepository.TruncRemainExternal(StorageList, date);
                foreach (var file in attachments)
                {
                    // Some browsers send file names with full path. This needs to be stripped.
                    var isError  = false;
                    var fileName = Path.GetFileName(file.FileName);
                    Session.Add("messRow" + messCount.ToString(), "Обрабатывается файл " + fileName);
                    messCount++;
                    var physicalFilePath = Path.Combine(Server.MapPath("~/TempFiles"), fileName);
                    try
                    {
                        if (System.IO.File.Exists(physicalFilePath))
                        {
                            System.IO.File.Delete(physicalFilePath);
                        }
                        try
                        {
                            file.SaveAs(physicalFilePath);
                        }
                        catch (Exception e)
                        {
                            Session.Add("messRow" + messCount.ToString(), "Ошибка при охранении файла на сервере:");
                            messCount++;
                            Session.Add("messRow" + messCount.ToString(), e.Message);
                            messCount++;
                            isError = true;
                        }
                        System.Data.DataTable table = null;
                        if (!isError)
                        {
                            try
                            {
                                ExcelReader excelReader = new ExcelReader(physicalFilePath);
                                table = excelReader.GetWorksheet(excelReader.workSheetNames[0]);
                            }
                            catch (Exception e)
                            {
                                Session.Add("messRow" + messCount.ToString(), "Ошибка при открытии файла:");
                                messCount++;
                                Session.Add("messRow" + messCount.ToString(), e.Message);
                                messCount++;
                                isError = true;
                            }
                        }
                        if (table != null)
                        {
                            try
                            {
                                DataRow[] result = table.Select("F2 = '*' and F3=" + storageName.Plant + " and F4 in (" + storageName.StorageNumber + ")");
                                Dictionary <string, object> queryParams = new Dictionary <string, object>();
                                foreach (DataRow row in result) // Loop over the rows.
                                {
                                    if (row[4] != System.DBNull.Value)
                                    {
                                        queryParams.Clear();
                                        queryParams.Add("Organization", storageName.Organization);
                                        queryParams.Add("ExternalCode", (string)row[4]);
                                        Nomenclature    nomenclature = nomenclatureRepository.FindOne(queryParams);
                                        RemaindExternal remExt       = new RemaindExternal();
                                        remExt.ActualDate   = DateTime.Now;
                                        remExt.RemaindDate  = paramDate;
                                        remExt.StorageName  = storageName;
                                        remExt.Nomenclature = nomenclature;
                                        remExt.Wear         = 100;
                                        String wear = (string)row[4];
                                        if ((wear.ToUpper(System.Globalization.CultureInfo.CurrentCulture) == "БУ") ||
                                            (wear.ToUpper(System.Globalization.CultureInfo.CurrentCulture) == "Б/У"))
                                        {
                                            remExt.Wear = 50;
                                        }
                                        remExt.ExternalCode = (string)row[4];
                                        int cnt = 0;
                                        if (row[11] != System.DBNull.Value)
                                        {
                                            int.TryParse((string)row[11], out cnt);
                                        }
                                        remExt.QuantityIn = cnt;
                                        cnt = 0;
                                        if (row[12] != System.DBNull.Value)
                                        {
                                            int.TryParse((string)row[12], out cnt);
                                        }
                                        remExt.QuantityOut = cnt;
                                        cnt = 0;
                                        if (row[13] != System.DBNull.Value)
                                        {
                                            int.TryParse((string)row[13], out cnt);
                                        }
                                        remExt.Quantity = cnt;
                                        remaindExternalRepository.SaveOrUpdate(remExt);
                                    }
                                }
                                Session.Add("messRow" + messCount.ToString(), "Обработано " + result.Length + " записей.");
                                messCount++;
                            }
                            catch (Exception e)
                            {
                                Session.Add("messRow" + messCount.ToString(), "Ошибка сохранении данных в БД:");
                                messCount++;
                                Session.Add("messRow" + messCount.ToString(), e.Message);
                                messCount++;
                                isError = true;
                            }
                        }
                        if (!isError)
                        {
                            remaindExternalRepository.DbContext.CommitTransaction();
                            Session.Add("messRow" + messCount.ToString(), "Файл успешно обработан");
                            messCount++;
                        }
                        else
                        {
                            remaindExternalRepository.DbContext.RollbackTransaction();
                        }
                    }
                    finally
                    {
                        System.IO.File.Delete(physicalFilePath);
                    }
                }
            }
            Session.Add("row_count", messCount.ToString());
            return(RedirectToAction("Index"));
        }