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>()))); }
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)); }
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")); }