public BaseResponse Get(int id) { if (id == 0) { return new BaseResponse() { StatusCode = 400, Message = "Id is empty" } } ; var result = _repository.Get(id); if (result == null) { return new BaseResponse() { StatusCode = 404, Message = "Operation not found." } } ; result.Message = "OK"; result.StatusCode = StatusCodes.Status200OK; return(result); } } }
public void Storno(int id, int workerWorkplaceId, int StorageNameId) { Operation oper = operationRepository.Get(id); Operation operTransfer = oper.TransferOperation; if (oper == null) { ModelState.AddModelError("Сторнирование операции", "Операция не найдена!"); } else { if (oper.RefOperation != null) { ModelState.AddModelError("Сторнирование операции", "Повторное сторнирование операции!"); } } Dictionary <string, object> queryParams = new Dictionary <string, object>(); //Если операция связана с МОЛ if (oper.OperType.Id.In(DataGlobals.OPERATION_MOL_STORAGE_IN, /*Возврат дежурной на склад*/ DataGlobals.OPERATION_MOL_STORAGE_OUT, /*Выдача дежурной МОЛ со склада*/ DataGlobals.OPERATION_MOL_OUT, /*Списание дежурной с МОЛ*/ DataGlobals.OPERATION_MOL_WORKER_IN, /*Выдача дежурной от МОЛ работнику*/ DataGlobals.OPERATION_MOL_WORKER_RETURN, /*Возврат дежурной от работника МОЛ*/ DataGlobals.OPERATION_MOL_MOVE_OUT, /*Перевод дежурной. Списание с забаланса*/ DataGlobals.OPERATION_MOL_MOVE_IN /*Перевод дежурной. Постановка на забаланс*/)) { queryParams.Clear(); queryParams.Add("Operation", oper); var list = matPersonCardContentRepository.GetByCriteria(queryParams); MatPersonCardContent mpcc = null; if (list.Count > 0) { mpcc = list[0]; } else { ModelState.AddModelError("Сторнирование операции", "У МОЛ не найдена номенклатура для сторнирования!"); } queryParams.Clear(); queryParams.Add("Worker.Id", workerWorkplaceId); var mpchList = matPersonCardHeadRepository.GetByLikeCriteria(queryParams); MatPersonCardHead mpch = null; if (mpchList.Count > 0) { mpch = mpchList[0]; } queryParams.Clear(); queryParams.Add("MatPersonCardHead", mpch); queryParams.Add("Operation.Organization", oper.Organization); queryParams.Add("[in]Operation.OperType.Id", DataGlobals.OPERATION_MOL_STORAGE_IN + "," + /*Возврат дежурной на склад*/ DataGlobals.OPERATION_MOL_STORAGE_OUT + "," + /*Выдача дежурной МОЛ со склада*/ DataGlobals.OPERATION_MOL_OUT + "," + /*Списание дежурной с МОЛ*/ DataGlobals.OPERATION_MOL_WORKER_IN + "," + /*Выдача дежурной от МОЛ работнику*/ DataGlobals.OPERATION_MOL_WORKER_RETURN + "," + /*Возврат дежурной от работника МОЛ*/ DataGlobals.OPERATION_MOL_MOVE_OUT + "," + /*Перевод дежурной. Списание с забаланса*/ DataGlobals.OPERATION_MOL_MOVE_IN /*Перевод дежурной. Постановка на забаланс*/); queryParams.Add("[]Operation.RefOperation", null); queryParams.Add("[>]Operation.DocDate", oper.DocDate); var mpcclist = matPersonCardContentRepository.GetByCriteria(queryParams); if (mpcclist.Count > 0) { ModelState.AddModelError("Сторнирование операции", "У МОЛ была операция, которая по дате позже сторнируемой!"); } if (ModelState.IsValid) { if (oper.OperType.Id == DataGlobals.OPERATION_MOL_STORAGE_IN) { if (mpcc.Storage.Quantity < Math.Abs(mpcc.Quantity)) { ModelState.AddModelError("Сторнирование операции", "На складе не хватает номенклатуры!"); } else { // Т.к. при операции возврата mpcc.Quantity отрицательное, то нужно его * на -1 mpcc.Storage.Quantity = mpcc.Storage.Quantity - (-1) * mpcc.Quantity; } } if (oper.OperType.Id == DataGlobals.OPERATION_MOL_STORAGE_OUT) { mpcc.Storage.Quantity = mpcc.Storage.Quantity + mpcc.Quantity; } } // if (oper.OperType.Id == DataGlobals.OPERATION_MOL_OUT) { } if (oper.OperType.Id == DataGlobals.OPERATION_MOL_WORKER_IN || oper.OperType.Id == DataGlobals.OPERATION_MOL_WORKER_RETURN) { queryParams.Clear(); WorkerCardContent wcc = null; if (oper.OperType.Id == DataGlobals.OPERATION_MOL_WORKER_IN) { queryParams.Add("Operation", oper); } else { queryParams.Add("OperReturn", oper); } wcc = workerCardContentRepository.FindOne(queryParams); if (wcc == null) { ModelState.AddModelError("Сторнирование операции", "Не найдена номенклатура на карточке. Сторнирование не возможно! "); } if (wcc.OperReturn != null) { ModelState.AddModelError("Сторнирование выдачи", "У работника был возврат этой номенклатуры!"); } if ((wcc.Quantity - oper.Quantity) < 0) { ModelState.AddModelError("Сторнирование выдачи", "У работника на руках меньше кол-во номенклатуры!"); } if (ModelState.IsValid) { wcc.Quantity = wcc.Quantity - oper.Quantity; } } //Для операции "Перевод между МОЛ" обработка особая if (oper.OperType.Id == DataGlobals.OPERATION_MOL_MOVE_OUT || oper.OperType.Id == DataGlobals.OPERATION_MOL_MOVE_IN) { //Ищем операции для обоих МОЛ. queryParams.Clear(); queryParams.Add("DocNumber", oper.DocNumber); queryParams.Add("Organization", oper.Organization); queryParams.Add("Storage", oper.Storage); queryParams.Add("OperDate", oper.OperDate); queryParams.Add("DocDate", oper.DocDate); queryParams.Add("[in]OperType.Id", DataGlobals.OPERATION_MOL_MOVE_OUT + "," + DataGlobals.OPERATION_MOL_MOVE_IN); IList <Operation> listOper = operationRepository.GetByLikeCriteria(queryParams); if (listOper.Count != 2) { ModelState.AddModelError("Сторнирование перевода", "Не найдены операции по перемещению между МОЛ в достаточном кол-ве!"); } else { string docNumber = operationRepository.GetNextDocNumber(DataGlobals.OPERATION_STORAGE_TRANSFER_OUT, getCurrentEnterpriseId()); foreach (var item in listOper) { Operation stornoOper = new Operation(); MatPersonCardContent stornoMpcc = new MatPersonCardContent(); queryParams.Clear(); queryParams.Add("Operation", item); var l = matPersonCardContentRepository.GetByCriteria(queryParams); MatPersonCardContent findMpcc = null; if (l.Count > 0) { stornoOper.Quantity = -1 * Math.Abs(item.Quantity); stornoOper.DocDate = item.DocDate; stornoOper.DocNumber = docNumber; stornoOper.DocType = item.DocType; stornoOper.IsCorporate = item.IsCorporate; stornoOper.Motiv = item.Motiv; stornoOper.OperDate = item.OperDate; stornoOper.OperType = item.OperType; stornoOper.Organization = item.Organization; stornoOper.RefOperation = item; stornoOper.Storage = item.Storage; stornoOper.StorageName = item.StorageName; stornoOper.TransferOperation = item.TransferOperation; stornoOper.Wear = item.Wear; stornoOper.WorkerWorkplace = item.WorkerWorkplace; operationRepository.SaveOrUpdate(stornoOper); item.RefOperation = stornoOper; operationRepository.SaveOrUpdate(item); findMpcc = l[0]; stornoMpcc.MatPersonCardHead = findMpcc.MatPersonCardHead; stornoMpcc.Quantity = -1 * findMpcc.Quantity; stornoMpcc.Storage = findMpcc.Storage; stornoMpcc.Wear = findMpcc.Wear; stornoMpcc.Operation = stornoOper; stornoMpcc.OperType = findMpcc.OperType; stornoMpcc.OperDate = findMpcc.OperDate; matPersonCardContentRepository.SaveOrUpdate(stornoMpcc); } else { ModelState.AddModelError("Сторнирование операции", "У МОЛ не найдена номенклатура для сторнирования перевода!"); break; } } } } if (ModelState.IsValid) { if (oper.OperType.Id.In(DataGlobals.OPERATION_MOL_STORAGE_IN, /*Возврат дежурной на склад*/ DataGlobals.OPERATION_MOL_STORAGE_OUT, /*Выдача дежурной МОЛ со склада*/ DataGlobals.OPERATION_MOL_OUT, /*Списание дежурной с МОЛ*/ DataGlobals.OPERATION_MOL_WORKER_IN, /*Выдача дежурной от МОЛ работнику*/ DataGlobals.OPERATION_MOL_WORKER_RETURN /*Возврат дежурной от работника МОЛ*/)) { if (oper.OperType.Id.In(DataGlobals.OPERATION_MOL_STORAGE_IN, /*Возврат дежурной на склад*/ DataGlobals.OPERATION_MOL_STORAGE_OUT /*Выдача дежурной МОЛ со склада*/)) { DateTime maxStornoDate = remainRepository.GetMaxRemainDate(StorageNameId); maxStornoDate = remainRepository.GetActialRemainDate(StorageNameId, maxStornoDate); DateTime paramDateFrom = new DateTime(oper.OperDate.Year, oper.OperDate.Month, oper.OperDate.Day); paramDateFrom = paramDateFrom.AddMonths(1); paramDateFrom = paramDateFrom.AddDays(-1 * (paramDateFrom.Day - 1)); Remaind remain = null; if (maxStornoDate >= paramDateFrom) { queryParams.Clear(); queryParams.Add("RemaindDate", paramDateFrom); queryParams.Add("StorageName", oper.Storage.StorageName); queryParams.Add("Storage", oper.Storage); Dictionary <string, object> orderParams = new Dictionary <string, object>(); remain = remainRepository.FindOne(queryParams); //Если в остатках такой записи не оказалось, то создаем ее if (remain == null) { remain = new Remaind(); remain.RemaindDate = paramDateFrom; remain.Storage = oper.Storage; remain.StorageName = oper.Storage.StorageName; remain.Nomenclature = oper.Storage.Nomenclature; remain.Wear = int.Parse(oper.Storage.Wear); remain.NomBodyPartSize = oper.Storage.NomBodyPartSize; remain.Growth = oper.Storage.Growth; remain.Quantity = 0; } } if (remain != null) { remain.Quantity = remain.Quantity + (-1 * mpcc.Quantity); remainRepository.SaveOrUpdate(remain); } } Operation stornoOper = new Operation(); stornoOper.DocDate = oper.DocDate; string docNumber = ""; if (oper.OperType.Id == DataGlobals.OPERATION_MOL_STORAGE_IN || oper.OperType.Id == DataGlobals.OPERATION_MOL_WORKER_RETURN) { docNumber = operationRepository.GetNextDocNumber(DataGlobals.OPERATION_WORKER_RETURN, getCurrentEnterpriseId()); } else if (oper.OperType.Id == DataGlobals.OPERATION_MOL_STORAGE_OUT || oper.OperType.Id == DataGlobals.OPERATION_MOL_WORKER_IN) { docNumber = operationRepository.GetNextDocNumber(DataGlobals.OPERATION_WORKER_IN, getCurrentEnterpriseId()); } else if (oper.OperType.Id == DataGlobals.OPERATION_MOL_OUT) { docNumber = operationRepository.GetNextDocNumber(DataGlobals.OPERATION_MOL_OUT, getCurrentEnterpriseId()); } else { docNumber = oper.DocNumber; } stornoOper.DocNumber = docNumber; stornoOper.DocType = oper.DocType; stornoOper.Motiv = oper.Motiv; stornoOper.Note = oper.Note; stornoOper.OperDate = oper.OperDate; stornoOper.OperType = oper.OperType; stornoOper.Organization = oper.Organization; stornoOper.Partner = oper.Partner; stornoOper.Quantity = -1 * Math.Abs(oper.Quantity); stornoOper.Storage = oper.Storage; stornoOper.StorageName = oper.StorageName; stornoOper.Wear = oper.Wear; stornoOper.WorkerWorkplace = oper.WorkerWorkplace; stornoOper.RefOperation = oper; operationRepository.SaveOrUpdate(stornoOper); oper.RefOperation = stornoOper; operationRepository.SaveOrUpdate(oper); MatPersonCardContent stornoMpcc = new MatPersonCardContent(); stornoMpcc.MatPersonCardHead = mpcc.MatPersonCardHead; stornoMpcc.Quantity = -1 * mpcc.Quantity; stornoMpcc.Storage = mpcc.Storage; stornoMpcc.Wear = mpcc.Wear; stornoMpcc.Operation = stornoOper; stornoMpcc.OperType = mpcc.OperType; stornoMpcc.OperDate = mpcc.OperDate; matPersonCardContentRepository.SaveOrUpdate(stornoMpcc); } } } //Если операция связана с карточкой else { WorkerCardContent wcc = null; if (oper.OperType.Id == DataGlobals.OPERATION_WORKER_IN || oper.OperType.Id == DataGlobals.OPERATION_STORAGE_TRANSFER_IN) { queryParams.Add("Operation", oper); } else { queryParams.Add("OperReturn", oper); } wcc = workerCardContentRepository.FindOne(queryParams); if (wcc == null) { ModelState.AddModelError("Сторнирование операции", "Не найдена номенклатура на карточке. Сторнирование не возможно! "); } Remaind remain = null; Storage stor = null; if (ModelState.IsValid) { DateTime maxStornoDate = remainRepository.GetMaxRemainDate(StorageNameId); maxStornoDate = remainRepository.GetActialRemainDate(StorageNameId, maxStornoDate); DateTime paramDateFrom = new DateTime(oper.OperDate.Year, oper.OperDate.Month, oper.OperDate.Day); paramDateFrom = paramDateFrom.AddMonths(1); paramDateFrom = paramDateFrom.AddDays(-1 * (paramDateFrom.Day - 1)); if (maxStornoDate >= paramDateFrom) { queryParams.Clear(); queryParams.Add("RemaindDate", paramDateFrom); //DateTime paramDateTo = new DateTime(oper.OperDate.Year, oper.OperDate.Month, oper.OperDate.Day); //paramDateTo = paramDateTo.AddMonths(1); //paramDateTo = paramDateTo.AddDays(-1 * paramDateTo.Day); //queryParams.Add("[<=]RemaindDate", paramDateTo); queryParams.Add("StorageName", oper.Storage.StorageName); queryParams.Add("Storage", oper.Storage); Dictionary <string, object> orderParams = new Dictionary <string, object>(); remain = remainRepository.FindOne(queryParams); //Если в остатках такой записи не оказалось, то создаем ее if (remain == null) { remain = new Remaind(); remain.RemaindDate = paramDateFrom; remain.Storage = oper.Storage; remain.StorageName = oper.Storage.StorageName; remain.Nomenclature = oper.Storage.Nomenclature; remain.Wear = int.Parse(oper.Storage.Wear); remain.NomBodyPartSize = oper.Storage.NomBodyPartSize; remain.Growth = oper.Storage.Growth; remain.Quantity = 0; } } stor = storageRepository.Get(oper.Storage.Id); //Сторнируем выдачу работнику if (oper.OperType.Id == DataGlobals.OPERATION_WORKER_IN) { if (wcc.OperReturn != null) { ModelState.AddModelError("Сторнирование выдачи", "У работника был возврат этой номенклатуры!"); } if ((wcc.Quantity - oper.Quantity) < 0) { ModelState.AddModelError("Сторнирование выдачи", "У работника на руках меньше кол-во номенклатуры!"); } if (ModelState.IsValid) { wcc.Quantity = wcc.Quantity - oper.Quantity; stor.Quantity = stor.Quantity + oper.Quantity; if (remain != null) { remain.Quantity = remain.Quantity + oper.Quantity; } } } //Сторнируем возврат работником if (oper.OperType.Id == DataGlobals.OPERATION_WORKER_RETURN) { if (((stor.Quantity - oper.Quantity) < 0) & (oper.Wear != "0")) { ModelState.AddModelError("Сторнирование возврата", "На складе не хватает заданной номенклатуры!"); } else { wcc.OperReturn = null; wcc.EndDate = Null_Date; wcc.Quantity = wcc.Quantity + oper.Quantity; // Если не утиль, то обновляем склад if (oper.Wear != "0") { stor.Quantity = stor.Quantity - oper.Quantity; } } if (remain != null) { if (((remain.Quantity - oper.Quantity) < 0) & (oper.Wear != "0")) { ModelState.AddModelError("Сторнирование возврата", "После этой операции произошло снятие остатков в конце месяца. В этих остатках не хватает кол-ва!"); } else { wcc.Quantity = wcc.Quantity + oper.Quantity; // Если не утиль, то обновляем склад if (oper.Wear != "0") { stor.Quantity = stor.Quantity - oper.Quantity; } } } } //Сторнируем списание с работника if (oper.OperType.Id == DataGlobals.OPERATION_WORKER_OUT || oper.OperType.Id == DataGlobals.OPERATION_WORKER_OUT_TIME) { if (wcc.Quantity == 0) { wcc.OperReturn = null; wcc.EndDate = Null_Date; } wcc.Quantity = wcc.Quantity + oper.Quantity; } //Сторнируем перевод работника состояние на личных карточках if (oper.OperType.Id == DataGlobals.OPERATION_STORAGE_TRANSFER_IN || oper.OperType.Id == DataGlobals.OPERATION_STORAGE_TRANSFER_OUT) { queryParams.Clear(); if (oper.OperType.Id == DataGlobals.OPERATION_STORAGE_TRANSFER_IN) { queryParams.Add("Operation", oper); wcc = workerCardContentRepository.FindOne(queryParams); workerCardContentRepository.Delete(wcc); queryParams.Clear(); queryParams.Add("OperReturn", operTransfer); wcc = workerCardContentRepository.FindOne(queryParams); if (wcc.Quantity == 0) { wcc.OperReturn = null; wcc.EndDate = Null_Date; } wcc.Quantity = wcc.Quantity + oper.Quantity; } if (oper.OperType.Id == DataGlobals.OPERATION_STORAGE_TRANSFER_OUT) { queryParams.Clear(); queryParams.Add("Operation", operTransfer); wcc = workerCardContentRepository.FindOne(queryParams); workerCardContentRepository.Delete(wcc); queryParams.Clear(); queryParams.Add("OperReturn", oper); wcc = workerCardContentRepository.FindOne(queryParams); if (wcc.Quantity == 0) { wcc.OperReturn = null; wcc.EndDate = Null_Date; } wcc.Quantity = wcc.Quantity + oper.Quantity; } } } if (ModelState.IsValid) { workerCardContentRepository.SaveOrUpdate(wcc); //Если не списание с работника if (oper.OperType.Id != DataGlobals.OPERATION_WORKER_OUT) { // Если не утиль, то обновляем склад if (oper.Wear != "0") { storageRepository.SaveOrUpdate(stor); } } Operation stornoOper = new Operation(); stornoOper.DocDate = oper.DocDate; // stornoOper.DocNumber = oper.DocNumber; string docNumber = ""; if (oper.OperType.Id == DataGlobals.OPERATION_WORKER_RETURN || oper.OperType.Id == DataGlobals.OPERATION_WORKER_IN) { docNumber = operationRepository.GetNextDocNumber(oper.OperType.Id, getCurrentEnterpriseId()); } else if (oper.OperType.Id == DataGlobals.OPERATION_STORAGE_TRANSFER_IN || oper.OperType.Id == DataGlobals.OPERATION_STORAGE_TRANSFER_OUT) { docNumber = operationRepository.GetNextDocNumber(DataGlobals.OPERATION_STORAGE_TRANSFER_OUT, getCurrentEnterpriseId()); } else { docNumber = oper.DocNumber; } stornoOper.DocNumber = docNumber; stornoOper.DocType = oper.DocType; stornoOper.Motiv = oper.Motiv; stornoOper.Note = oper.Note; stornoOper.OperDate = oper.OperDate; stornoOper.OperType = oper.OperType; stornoOper.Organization = oper.Organization; stornoOper.Partner = oper.Partner; stornoOper.Quantity = -1 * oper.Quantity; stornoOper.Storage = oper.Storage; stornoOper.StorageName = oper.StorageName; stornoOper.Wear = oper.Wear; stornoOper.WorkerWorkplace = oper.WorkerWorkplace; stornoOper.RefOperation = oper; stornoOper.TransferOperation = oper; operationRepository.SaveOrUpdate(stornoOper); oper.RefOperation = stornoOper; oper.TransferOperation = stornoOper; operationRepository.SaveOrUpdate(oper); // Если операция перевода, то сторнируем связанную с ней if (operTransfer != null) { Operation stornoTranserOper = new Operation(); stornoTranserOper.DocDate = oper.DocDate; // stornoOper.DocNumber = oper.DocNumber; // Номер документа сторно будет новый, такой же как у первой операции stornoTranserOper.DocNumber = docNumber; stornoTranserOper.DocType = operTransfer.DocType; stornoTranserOper.Motiv = operTransfer.Motiv; stornoTranserOper.Note = operTransfer.Note; stornoTranserOper.OperDate = operTransfer.OperDate; stornoTranserOper.OperType = operTransfer.OperType; stornoTranserOper.Organization = operTransfer.Organization; stornoTranserOper.Partner = operTransfer.Partner; stornoTranserOper.Quantity = -1 * operTransfer.Quantity; stornoTranserOper.Storage = operTransfer.Storage; stornoTranserOper.StorageName = operTransfer.StorageName; stornoTranserOper.Wear = operTransfer.Wear; stornoTranserOper.WorkerWorkplace = operTransfer.WorkerWorkplace; stornoTranserOper.RefOperation = operTransfer; operationRepository.SaveOrUpdate(stornoTranserOper); operTransfer.RefOperation = stornoTranserOper; operationRepository.SaveOrUpdate(operTransfer); } //Если не списание с работника if (oper.OperType.Id == DataGlobals.OPERATION_WORKER_IN || oper.OperType.Id == DataGlobals.OPERATION_WORKER_RETURN) { if (remain != null) { remainRepository.SaveOrUpdate(remain); } } } } }