//private int getQuantityNomOnStorageByNomGroup(int nomGroupId)
        //{
        //    int result = 0;
        //    Dictionary<string, object> query = new Dictionary<string, object>();
        //    query.Add("Nomenclature.NomGroup.Id", nomGroupId);
        //    IList<Storage> storages = storageRepository.GetByCriteria(query);
        //    foreach (Storage curStorage in storages)
        //    {
        //        result += curStorage.Quantity;
        //    }
        //    return result;
        //}

        //private Storage getStorageForWorkerNorma(NormaContent normaContent, Worker worker)
        ////private Storage getStorageForWorkerNorma(NormaContent normaContent, IList<NomBodyPartSize> NomBodyPartSizes)
        //{
        //    //Storage storage = null;
        //    List<Storage> storages = null;
        //    NomBodyPart normaBodyPart = normaContent.NomGroup.NomBodyPart;
        //    NomBodyPartSize workerBodyPartSize = null;

        //    foreach (var item in worker.NomBodyPartSizes)
        //    //foreach (var item in NomBodyPartSizes)
        //    {
        //        if (item.NomBodyPart.Id == normaBodyPart.Id)
        //        {
        //            workerBodyPartSize = item;
        //            break;
        //        }
        //    }

        //    Dictionary<string, object> query = new Dictionary<string, object>();
        //    query.Add("StorageName.Organization.Id", int.Parse(getCurrentEnterpriseId()));
        //    query.Add("Nomenclature.NomGroup.Id", normaContent.NomGroup.Id);
        //    query.Add("NomBodyPartSize.NomBodyPart.Id", normaBodyPart.Id);
        //    if (workerBodyPartSize != null && DataGlobals.SIZ_SIZE_ID != normaBodyPart.Id)
        //        query.Add("NomBodyPartSize.SizeNumber", workerBodyPartSize.SizeNumber);
        //    if (DataGlobals.CLOTH_SIZE_ID == normaBodyPart.Id)
        //        query.Add("Growth.SizeNumber", worker.Growth);
        //    storages = (List<Storage>)storageRepository.GetByCriteria(query);

        //    if (storages == null || storages.Count == 0)
        //    {
        //        query.Clear();
        //        query.Add("StorageName.Organization.Id", int.Parse(getCurrentEnterpriseId()));
        //        foreach (var normaNomGroup in normaContent.NormaNomGroups)
        //        {
        //            query.Add("Nomenclature.NomGroup.Id", normaNomGroup.NomGroup.Id);
        //            storages.AddRange(storageRepository.GetByLikeCriteria(query));
        //            query.Remove("Nomenclature.NomGroup.Id");

        //        }

        //    }

        //    if (storages == null || storages.Count == 0)
        //    {
        //        storages.Add(new Storage());
        //    }

        //    return storages[0];
        //}

        private WorkerCardContent getWorkerCard(int workerCardContentId, WorkerCardHead workerCardHead)
        {
            WorkerCardContent outWorkerCard = null;

            foreach (WorkerCardContent item in workerCardHead.WorkerCardContents)
            {
                if (workerCardContentId == item.Id)
                {
                    outWorkerCard = item;
                    break;
                }
            }

            return(outWorkerCard);
        }
        private WorkerCardContent rebuildWorkerCard(WorkerCardContent inWorkerCard)
        {
            WorkerCardContent outWorkerCard;
            Storage           storage;
            Operation         operation;

            storage   = rebuildStorage(inWorkerCard.Storage);
            operation = rebuildOperation(inWorkerCard.Operation);

            outWorkerCard           = new WorkerCardContent(inWorkerCard.Id);
            outWorkerCard.Storage   = storage;
            outWorkerCard.Operation = operation;
            outWorkerCard.Quantity  = inWorkerCard.Quantity;

            return(outWorkerCard);
        }
        public ActionResult _DebitWorkerCard(string workerCardContentId, int storageNameId, string docDate, string docNumber, int quantity)
        {
            ResultState resultState = new ResultState();

            resultState.Status = ResultState.OK;
            string[]        listWorkerCardContentId = workerCardContentId.Split(',');
            IFormatProvider culture = new System.Globalization.CultureInfo("ru-RU", true);

            foreach (var item in listWorkerCardContentId)
            {
                WorkerCardContent wcc = workerCardContentRepository.Get(Int32.Parse(item));
                if (wcc == null)
                {
                    resultState.Status = ResultState.ERROR;
                    resultState.setMessage("Указанная номенклатура не найдена!");
                }

                if (resultState.Status == ResultState.OK)
                {
                    if (wcc.Storage.StorageName.Id == storageNameId)
                    {
                        Operation operation = new Operation();
                        //Списание досрочно
                        operation.Motiv           = motivRepository.Get(2);
                        operation.DocNumber       = docNumber;
                        operation.DocDate         = DateTime.ParseExact(docDate, DataGlobals.DATE_FORMAT_FULL_YEAR, culture);
                        operation.OperType        = operTypeRepository.Get(DataGlobals.OPERATION_WORKER_OUT);
                        operation.WorkerWorkplace = wcc.WorkerCardHead.WorkerWorkplace;
                        operation.Organization    = organizationRepository.Get(operation.WorkerWorkplace.RootOrganization);
                        operation.Quantity        = quantity;
                        operation.Storage         = wcc.Operation.Storage;
                        operationRepository.SaveOrUpdate(operation);

                        wcc.OperReturn = operation;
                        wcc.Quantity   = 0;
                        wcc.EndDate    = DateTime.Now;
                        workerCardContentRepository.SaveOrUpdate(wcc);
                    }
                    else
                    {
                        resultState.Status = ResultState.ERROR;
                        resultState.setMessage("Функция списания спецодежды с другого склада не реализована!");
                    }
                }
            }
            return(Json(resultState));
        }
        public ActionResult _ReturnWorkerCard(string workerCardContentId, int storageNameId, int quantity)
        {
            ResultState resultState = new ResultState();

            resultState.Status = ResultState.OK;
            string[] listWorkerCardContentId = workerCardContentId.Split(',');
            foreach (var item in listWorkerCardContentId)
            {
                WorkerCardContent wcc = workerCardContentRepository.Get(Int32.Parse(item));
                if (wcc == null)
                {
                    resultState.Status = ResultState.ERROR;
                    resultState.setMessage("Указанная номенклатура не найдена!");
                }

                if (resultState.Status == ResultState.OK)
                {
                    if (wcc.Storage.StorageName.Id == storageNameId)
                    {
                        Operation operation = new Operation();
                        //Возврат Перевод работника
                        operation.Motiv           = motivRepository.Get(4);
                        operation.DocNumber       = operationRepository.GetNextDocNumber(DataGlobals.OPERATION_WORKER_RETURN, getCurrentEnterpriseId());
                        operation.DocDate         = DateTime.Now;
                        operation.OperType        = operTypeRepository.Get(DataGlobals.OPERATION_WORKER_RETURN);
                        operation.WorkerWorkplace = wcc.WorkerCardHead.WorkerWorkplace;
                        operation.Organization    = organizationRepository.Get(operation.WorkerWorkplace.RootOrganization);
                        operation.Quantity        = quantity;
                        operation.Storage         = wcc.Operation.Storage;
                        operationRepository.SaveOrUpdate(operation);

                        wcc.OperReturn = operation;
                        wcc.Quantity   = 0;
                        wcc.EndDate    = DateTime.Now;
                        workerCardContentRepository.SaveOrUpdate(wcc);
                    }
                    else
                    {
                        resultState.Status = ResultState.ERROR;
                        resultState.setMessage("Функция возврата спецодежды на другой склад не реализована!");
                    }
                }
            }
            return(Json(resultState));
        }
        private WorkerCardContent getWorkerCard(IList <NormaNomGroup> normaNomGroups, IList <WorkerCardContent> workerCards)
        {
            int workerNomGroupId;
            WorkerCardContent workerCard    = null;
            WorkerCardContent outWorkerCard = null;
            NomGroup          nomGroup;

            foreach (NormaNomGroup item in normaNomGroups)
            {
                nomGroup = item.NomGroup;
                foreach (WorkerCardContent curWorkerCard in workerCards)
                {
                    workerNomGroupId = curWorkerCard.Storage.Nomenclature.NomGroup.Id;
                    if (nomGroup.Id == workerNomGroupId)
                    {
                        workerCard = rebuildWorkerCard(curWorkerCard);

                        //workerCards.Remove(curWorkerCard);

                        if (outWorkerCard == null)
                        {
                            outWorkerCard = workerCard;
                        }
                        else
                        {
                            //outWorkerCard.Operation = workerCard.Operation;
                            outWorkerCard.Quantity += workerCard.Quantity;
                        }
                    }
                }
            }
            //if (outWorkerCard == null)
            //{
            //    outWorkerCard = new WorkerCardContent();
            //    outWorkerCard.Storage = new Storage();
            //    outWorkerCard.Storage.Nomenclature = new Nomenclature();
            //}

            return(outWorkerCard);
        }
Beispiel #6
0
        public static IList <WorkerCardContent> reorderWorkerCardContents(IList <WorkerCardContent> workerCardContents)
        {
            List <WorkerCardContent> wcc = new List <WorkerCardContent>(workerCardContents);

            wcc.Sort();
            workerCardContents = wcc;

            WorkerCardContent item = null;

            for (int i = 0, j = 0; j < workerCardContents.Count; i++)
            {
                item = workerCardContents[i];
                if (item.Storage.Nomenclature.NomBodyPart.Id == DataGlobals.SIZ_SIZE_ID)
                {
                    workerCardContents.Remove(item);
                    workerCardContents.Add(item);
                    i--;
                }
                j++;
            }
            return(workerCardContents);
        }
//        public ActionResult Update(string id)
        //public ActionResult Update(WorkerNorma workerNorma)
        public ActionResult Update([Bind(Prefix = "updated")] IEnumerable <WorkerNorma> workerNormas)
        {
            //int workerWorkplaceId = (int)HttpContext.Cache.Get("workerWorkplaceId");
            int    workerWorkplaceId = (int)Session["workerWorkplaceId"];
            string docNumber         = operationRepository.GetNextDocNumber(DataGlobals.OPERATION_WORKER_RETURN, getCurrentEnterpriseId());
            int?   motivId           = null;
            //DateTime? docDate = null;
            DateTime?operDate = null;
            // перове число текущего месяца
            DateTime firstDay = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1);
            // первое число предыдущего месяца
            DateTime minDate = firstDay.AddMonths(-1);

            Dictionary <string, object> query = new Dictionary <string, object>();

            query.Add("Id", workerWorkplaceId);
            WorkerWorkplace workerWorkplace = workerWorkplaceRepository.Get(workerWorkplaceId);

            query.Clear();
            query.Add("WorkerWorkplace", workerWorkplace);

            WorkerCardHead workerCardHead = workerCardRepository.FindOne(query);


            if (workerNormas != null)
            {
                int i = -1;
                foreach (var workerNorma in workerNormas)
                {
                    i++;
                    if (i == 0)
                    {
                        if (workerNorma.OperDate != null)
                        {
                            operDate = workerNorma.OperDate.Value;

                            if (DateTime.Today > operDate)
                            {
                                operDate = operDate.Value.AddHours(21).AddMinutes(0).AddSeconds(0);
                            }
                            else
                            {
                                operDate = operDate.Value.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute).AddSeconds(DateTime.Now.Second);
                            }
                        }
                        motivId = workerNorma.MotivId;
                    }

                    if (workerNorma.PutQuantity <= 0)
                    {
                        continue;
                    }

                    //NormaContent normaContent = normaContentRepository.Get(workerNorma.NormaContentId);

                    WorkerCardContent workerCardContentPresent = getWorkerCard(workerNorma.Id, workerCardHead);

                    //workerCardContent.Storage = workerNorma.WorkerCardContent.Storage;
                    //                    if (workerCardContentPresent.Quantity != workerNorma.PutQuantity)
                    //                        ModelState.AddModelError("updated[" + i + "].StorageName", "Списать можно только столько сколько есть на руках");


                    //if (operDate != null && (DateTime.Now < operDate || minDate > operDate))
                    if (operDate != null && DateTime.Now < operDate)
                    {
                        ModelState.AddModelError(operDate + ": ", "Дата операции должна быть не больше текущей даты и не меньше 1-го числа предыдущего месяца");
                    }
                    if (operDate < workerNorma.ReceptionDate)
                    {
                        ModelState.AddModelError(operDate + ": ", "Дата возврата не может быть меньше даты выдачи");
                    }
                    if (firstDay > operDate)
                    {
                        // проверка на закрытие периода
                        string   periodIsClosed = getConfigParamValue(configRepository, "periodIsClosed", getCurrentEnterpriseId());
                        string   periodDateStr  = getConfigParamValue(configRepository, "periodDate", 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)
                        {
                            ModelState.AddModelError(operDate + ": ", "Период закрыт для изменений");
                        }
                    }
                    if (workerNorma.PutQuantity <= 0)
                    {
                        ModelState.AddModelError(workerCardContentPresent.Storage.Nomenclature.Name, "Вернуть можно кол-во больше 0");
                    }

                    if (workerNorma.PutQuantity > workerCardContentPresent.Quantity)
                    {
                        ModelState.AddModelError(workerCardContentPresent.Storage.Nomenclature.Name, "Вернуть можно не больше чем есть на руках");
                    }


                    if (workerNorma.Wear == null)
                    {
                        ModelState.AddModelError(workerCardContentPresent.Storage.Nomenclature.Name, "Введите износ");
                    }


                    //if (string.IsNullOrEmpty(docNumber) || docDate == null)
                    //    ModelState.AddModelError("updated[" + i + "].StorageName", "Номер и дата документа должны быть заполнены");
                }

                if (ModelState.IsValid)
                {
                    foreach (var workerNorma in workerNormas)
                    {
                        if (workerNorma.PutQuantity <= 0)
                        {
                            continue;
                        }

                        WorkerCardContent workerCardContentPresent = getWorkerCard(workerNorma.Id, workerCardHead);
                        //workerCardContentPresent.Storage = null;

                        Operation oper = new Operation();
                        oper.OperDate     = operDate.Value;
                        oper.OperType     = operTypeRepository.Get(DataGlobals.OPERATION_WORKER_RETURN);
                        oper.Organization = organizationRepository.Get(workerWorkplace.RootOrganization);
                        oper.Quantity     = workerNorma.PutQuantity;
                        //oper.Storage = workerCardContentPresent.Storage;
                        oper.Wear            = workerNorma.Wear;
                        oper.DocNumber       = docNumber;
                        oper.DocDate         = oper.OperDate;
                        oper.Motiv           = motivRepository.Get(motivId.Value);
                        oper.WorkerWorkplace = workerWorkplace;
                        oper.GiveOperation   = workerCardContentPresent.GiveOperation;

                        //workerCardContentPresent.Operation = oper;
                        //workerCardContentPresent.Quantity -= oper.Quantity;
                        if (workerNorma.PutQuantity == workerCardContentPresent.Quantity)
                        {
                            workerCardHead.WorkerCardContents.Remove(workerCardContentPresent);
                        }
//                        workerCardContentRepository.Delete(workerCardContentPresent);

                        //workerCardRepository.SaveOrUpdate(workerCardHead);

                        // если не утиль, ищем позицию с таким износом на складе
                        //if (int.Parse(workerNorma.Wear) > 0)
                        //{
                        query.Clear();
                        query.Add("Nomenclature", workerCardContentPresent.Storage.Nomenclature);
                        if (workerCardContentPresent.Storage.NomBodyPartSize != null)
                        {
                            query.Add("NomBodyPartSize", workerCardContentPresent.Storage.NomBodyPartSize);
                        }
                        if (workerCardContentPresent.Storage.Growth != null)
                        {
                            query.Add("Growth", workerCardContentPresent.Storage.Growth);
                        }
                        query.Add("StorageName", workerCardContentPresent.Storage.StorageName);
                        if (int.Parse(workerNorma.Wear) > 0)
                        {
                            query.Add("Wear", workerNorma.Wear);
                        }
                        IList <Storage> storages = storageRepository.GetByCriteria(query);

                        Storage storage = null;
                        if (storages.Count > 0)
                        {
                            storage = storages[0];
                            if (int.Parse(workerNorma.Wear) > 0)
                            {
                                storage.Quantity += workerNorma.PutQuantity;
                            }
                        }
                        else
                        {
                            storage                 = new Storage();
                            storage.Growth          = workerCardContentPresent.Storage.Growth;
                            storage.NomBodyPartSize = workerCardContentPresent.Storage.NomBodyPartSize;
                            storage.Nomenclature    = workerCardContentPresent.Storage.Nomenclature;
                            storage.StorageName     = workerCardContentPresent.Storage.StorageName;
                            storage.Wear            = workerNorma.Wear;
                            if (int.Parse(workerNorma.Wear) > 0)
                            {
                                storage.Quantity = workerNorma.PutQuantity;
                            }
                            else
                            {
                                storage.Quantity = 0;
                            }
                        }
                        storageRepository.SaveOrUpdate(storage);
                        oper.Storage = storage;
                        operationRepository.SaveOrUpdate(oper);
                        if (workerNorma.PutQuantity == workerCardContentPresent.Quantity)
                        {
                            workerCardContentPresent.OperReturn = oper;
                            workerCardContentPresent.Quantity   = 0;
                            workerCardContentPresent.EndDate    = oper.OperDate;
                        }
                        else
                        {
                            workerCardContentPresent.Quantity = workerCardContentPresent.Quantity - workerNorma.PutQuantity;
                            WorkerCardContent wcc = new WorkerCardContent();
                            wcc.Quantity       = 0;
                            wcc.StartDate      = workerCardContentPresent.StartDate;
                            wcc.EndDate        = oper.OperDate;
                            wcc.WorkerCardHead = workerCardContentPresent.WorkerCardHead;
                            wcc.Storage        = workerCardContentPresent.Storage;
                            wcc.Operation      = workerCardContentPresent.Operation;
                            wcc.OperReturn     = oper;
                            wcc.NormaContent   = workerCardContentPresent.NormaContent;
                            wcc.GiveOperation  = workerCardContentPresent.GiveOperation;

                            workerCardContentRepository.SaveOrUpdate(wcc);
                        }
                        workerCardContentRepository.SaveOrUpdate(workerCardContentPresent);

                        if (firstDay > operDate)
                        {
                            //пересчитываем остатки
                            rebuildRemaind(operationRepository, remainsRepository, storage, minDate, firstDay.AddSeconds(-1), firstDay);
                        }
                        //}
                    }
                }
            }
            return(Select(workerWorkplaceId, (string)Session["workerWorkplaceText"], (string)Session["storageNameId"]));
        }
//        public ActionResult Update(string id)
        //public ActionResult Update(WorkerNorma workerNorma)
        public ActionResult Update([Bind(Prefix = "updated")] IEnumerable <WorkerNorma> workerNormas)
        {
            //int workerWorkplaceId = (int)HttpContext.Cache.Get("workerWorkplaceId");
            int workerWorkplaceId = (int)Session["workerWorkplaceId"];

            if (workerNormas != null)
            {
                int i = -1;
                foreach (var workerNorma in workerNormas)
                {
                    i++;
                    if (workerNorma.PutQuantity <= 0)
                    {
                        continue;
                    }
                    Dictionary <string, object> query = new Dictionary <string, object>();
                    query.Add("Id", workerWorkplaceId);
                    WorkerWorkplace workerWorkplace = workerWorkplaceRepository.Get(workerWorkplaceId);

                    //TryUpdateModel(workerNorma);

                    //WorkerCard workerCard = workerNorma.WorkerCard;
                    //WorkerCard workerCard = new WorkerCard();
                    query.Clear();
                    query.Add("WorkerWorkplace", workerWorkplace);

                    WorkerCardHead    workerCardHead    = workerCardRepository.FindOne(query);
                    WorkerCardContent workerCardContent = new WorkerCardContent();
                    if (workerCardHead == null)
                    {
                        workerCardHead = new WorkerCardHead();
                        workerCardHead.WorkerCardContents = new List <WorkerCardContent>();
                        workerCardHead.WorkerWorkplace    = workerWorkplace;
                    }

                    workerCardContent.Quantity = workerNorma.PutQuantity;
                    //workerCardContent.Storage = workerNorma.WorkerCardContent.Storage;
                    if (workerNorma.StorageId == 0)
                    {
                        ModelState.AddModelError("updated[" + i + "].StorageName", "Выберите номенклатуру");
                    }
                    else
                    {
                        workerCardContent.Storage        = storageRepository.Get(workerNorma.StorageId);
                        workerCardContent.WorkerCardHead = workerCardHead;

                        if (workerCardContent.Storage.Quantity - workerNorma.PutQuantity < 0)
                        {
                            ModelState.AddModelError("updated[" + i + "].StorageName", "На складе недостаточно кол-ва");
                        }

                        if (workerNorma.PresentQuantity + workerNorma.PutQuantity > workerNorma.NormaQuantity)
                        {
                            ModelState.AddModelError("updated[" + i + "].StorageName", "На руках есть номенклатура у которой не истек срок");
                        }
                    }

                    if (ModelState.IsValid)
                    {
                        //replaceIfExist(workerCardHead.WorkerCardContents, workerCardContent, workerNorma);

                        Operation oper = new Operation();
                        oper.OperDate               = DateTime.Now;
                        oper.OperType               = operTypeRepository.Get(DataGlobals.OPERATION_WORKER_IN);
                        oper.Organization           = organizationRepository.Get(workerWorkplace.RootOrganization);
                        oper.Quantity               = workerCardContent.Quantity;
                        oper.Storage                = workerCardContent.Storage;
                        workerCardContent.Operation = oper;
                        oper.Storage.Quantity      -= oper.Quantity;
                        oper.WorkerWorkplace        = workerWorkplace;

                        operationRepository.SaveOrUpdate(oper);
                        workerCardRepository.SaveOrUpdate(workerCardHead);
                    }
                }
            }
            return(Select(workerWorkplaceId));
        }
Beispiel #9
0
        public void SaveOnHand(HttpResponseBase response, string loadDate, int operTypeId, IEnumerable <HttpPostedFileBase> attachments)
        {
            // The Name of the Upload component is "attachments"
            IFormatProvider culture = new System.Globalization.CultureInfo("ru-RU", true);
            DateTime        operationDate;

            DateTime.TryParseExact(loadDate, DataGlobals.DATE_FORMAT_FULL_YEAR, null, System.Globalization.DateTimeStyles.None, out operationDate);
            if (operationDate == Null_Date)
            {
                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/>");
                            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;
                        }
                        if (!table.Columns.Contains("Кол-во"))
                        {
                            response.Write("Файл содержит не коррекные данные ('Кол-во').<br/>");
                            response.Flush();
                            isError = true;
                        }

                        /*
                         * if (!table.Columns.Contains("Период"))
                         * {
                         *  response.Write("Файл содержит не коррекные данные ('Период').<br/>");
                         *  response.Flush();
                         *  isError = true;
                         * }
                         */
                        int colTabN         = table.Columns.IndexOf("Табельный номер");
                        int colNomenclature = table.Columns.IndexOf("Номенклатурный номер");
                        int colDate         = table.Columns.IndexOf("Дата выдачи");
                        int colCount        = table.Columns.IndexOf("Кол-во");
                        int colUsePeriod    = -1;
                        if (!table.Columns.Contains("Период"))
                        {
                            colUsePeriod = table.Columns.IndexOf("Период");
                        }

                        if (!isError)
                        {
                            //                                    DataRow[] result = table.Select("F2 = '*' and F3=" + storageName.Plant + " and F4 in (" + storageName.StorageNumber + ")");
                            DataRow[] result = table.Select();
                            Dictionary <string, object> queryParams = new Dictionary <string, object>();
                            Dictionary <string, object> orderParams = new Dictionary <string, object>();
                            int          idOrg      = int.Parse(getCurrentEnterpriseId());
                            Organization currentOrg = organizationRepository.Get(idOrg);
                            Motiv        motiv      = motivRepository.Get(DataGlobals.MOTIVID_TRANSFER);
                            foreach (DataRow row in result) // Loop over the rows.
                            {
                                if (row[colTabN] != System.DBNull.Value)
                                {
                                    int tabN     = int.Parse(row[colTabN].ToString());
                                    int quantity = 0;
                                    if (!int.TryParse(row[colCount].ToString(), out quantity))
                                    {
                                        response.Write("У человека с Таб.№ " + tabN + " ошибка в кол-ве!<br/>");
                                        response.Flush();
                                        continue;
                                    }

                                    DateTime startDate;
                                    String   rowDate = row[colDate].ToString();
                                    if (rowDate.IndexOf(' ') > 0)
                                    {
                                        rowDate = rowDate.Substring(0, rowDate.IndexOf(' '));
                                    }
                                    DateTime.TryParseExact(rowDate, DataGlobals.DATE_FORMAT_FULL_YEAR, null, System.Globalization.DateTimeStyles.None, out startDate);

                                    if (startDate == Null_Date)
                                    {
                                        response.Write("У человека с Таб.№ " + tabN + " ошибочная дата выдачи!<br/>");
                                        response.Flush();
                                        continue;
                                    }

                                    if (startDate > DateTime.Now)
                                    {
                                        response.Write("У человека с Таб.№ " + tabN + " дата выдачи больше текущей даты!<br/>");
                                        response.Flush();
                                        continue;
                                    }
                                    int useperiod = 0;
                                    if (colUsePeriod >= 0)
                                    {
                                        useperiod = int.Parse(row[colUsePeriod].ToString());
                                    }

                                    // Ищем id работника  по табельному номеру, если не находим, то не берем его
                                    queryParams.Clear();
                                    queryParams.Add("RootOrganization", currentOrg.Id);
                                    //queryParams.Add("IsActive", true);
                                    queryParams.Add("TabN", tabN);
                                    Worker correntWorker = workerRepository.FindOne(queryParams);
                                    if (correntWorker == null)
                                    {
                                        response.Write("Человека с Таб.№ " + tabN + " нет в базе!<br/>");
                                        response.Flush();
                                        continue;
                                    }
                                    // Ищем ID рабочего места
                                    queryParams.Clear();
                                    queryParams.Add("RootOrganization", currentOrg.Id);
                                    queryParams.Add("Worker", correntWorker);
                                    // Будем ипользовать последнее место работы
                                    orderParams.Clear();
                                    orderParams.Add("BeginDate", DESC);
                                    orderParams.Add("IsActive", DESC);

                                    IList <WorkerWorkplace> workerWorkplaces = workerWorkplaceRepository.GetByLikeCriteria(queryParams, orderParams);
                                    // Ищем 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;
                                        }
                                    }

                                    // Ищем склад
                                    queryParams.Clear();
                                    queryParams.Add("AreaCode", workerWorkplaces[0].Organization.AreaCode);
                                    queryParams.Add("Organization", currentOrg);

                                    //StorageName storageName = storageNameRepository.FindOne(queryParams);
                                    StorageName storageName = workerWorkplaces[0].Organization.StorageName;
                                    if (storageName == null)
                                    {
                                        response.Write("Для человека с Таб.№ " + tabN + "не найден склад!<br/>");
                                        response.Flush();
                                        continue;
                                    }

                                    operationRepository.DbContext.BeginTransaction();
                                    try
                                    {
                                        // Ищем есть ли подобная позиция на складе (номенклатура+рост+размер), считаем, что % годностиу всех 100
                                        // Если не находим, то добавляем запись на склад с нулевым кол-вом
                                        queryParams.Clear();
                                        queryParams.Add("StorageName", storageName);
                                        queryParams.Add("Nomenclature", nomenclatures[0]);
                                        queryParams.Add("Wear", "100");
                                        Storage storage = storageRepository.FindOne(queryParams);
                                        if (storage == null)
                                        {
                                            storage              = new Storage();
                                            storage.StorageName  = storageName;
                                            storage.Nomenclature = nomenclatures[0];
                                            storage.Quantity     = 0;
                                            storage.Wear         = "100";
                                            storageRepository.SaveOrUpdate(storage);
                                            storage.NomBodyPartSize = nomenclatures[0].NomBodyPartSize;
                                            storage.Growth          = nomenclatures[0].Growth;
                                        }
                                        OperType operType = operTypeRepository.Get(operTypeId);

                                        //OperType operType = operTypeRepository.Get(DataGlobals.OPERATION_WORKER_IN);
                                        //OperType operType = operTypeRepository.Get(DataGlobals.OPERATION_STORAGE_TRANSFER_IN);
                                        // Добавляем операцию постановки на забаланс , вместо последней выдачи
                                        queryParams.Clear();
                                        queryParams.Add("OperType", operType);
                                        queryParams.Add("DocNumber", "0");
                                        queryParams.Add("Storage", storage);
                                        queryParams.Add("WorkerWorkplace", workerWorkplaces[0]);
                                        Operation operation = operationRepository.FindOne(queryParams);
                                        if (operation == null)
                                        {
                                            operation           = new Operation();
                                            operation.DocNumber = "0";
                                            if (operType.Id == DataGlobals.OPERATION_STORAGE_TRANSFER_IN)
                                            {
                                                operation.DocDate  = operationDate;
                                                operation.OperDate = operationDate;
                                                operation.Motiv    = motiv;
                                            }
                                            else
                                            {
                                                operation.DocDate  = startDate;
                                                operation.OperDate = startDate;
                                            }
                                            operation.OperType        = operType;
                                            operation.Organization    = storageName.Organization;
                                            operation.Quantity        = quantity;
                                            operation.Wear            = "100";
                                            operation.StorageName     = storageName;
                                            operation.Storage         = storage;
                                            operation.WorkerWorkplace = workerWorkplaces[0];
                                            if (operation.OperType.Id == DataGlobals.OPERATION_WORKER_IN)
                                            {
                                                operation.GiveOperation = operation;
                                            }
                                            operationRepository.SaveOrUpdate(operation);
                                        }
                                        // Формируем личную карточку
                                        // Если нет шапки формируеруем шапку

                                        queryParams.Clear();
                                        queryParams.Add("WorkerWorkplace", workerWorkplaces[0]);
                                        WorkerCardHead workerCardHead = workerCardHeadRepository.FindOne(queryParams);
                                        if (workerCardHead == null)
                                        {
                                            workerCardHead = new WorkerCardHead();
                                            workerCardHead.WorkerWorkplace = workerWorkplaces[0];
                                            workerCardHeadRepository.SaveOrUpdate(workerCardHead);
                                        }
                                        // Формируем содержание личной карточки
                                        queryParams.Clear();
                                        queryParams.Add("Operation", operation);
                                        queryParams.Add("WorkerCardHead", workerCardHead);
                                        WorkerCardContent workerCardContent = workerCardContentRepository.FindOne(queryParams);
                                        if (workerCardContent == null)
                                        {
                                            workerCardContent                = new WorkerCardContent();
                                            workerCardContent.Operation      = operation;
                                            workerCardContent.Quantity       = quantity;
                                            workerCardContent.Storage        = storage;
                                            workerCardContent.WorkerCardHead = workerCardHead;
                                            workerCardContent.StartDate      = startDate;
                                            workerCardContent.UsePeriod      = useperiod;
                                            workerCardContentRepository.SaveOrUpdate(workerCardContent);
                                        }
                                        operationRepository.DbContext.CommitTransaction();
                                    }
                                    catch (Exception e)
                                    {
                                        operationRepository.DbContext.RollbackTransaction();
                                        response.Write("Ошибка при сохранении данных в БД:<br/>");
                                        response.Write(e.Message);
                                        response.Write("<br/>");
                                        if (e.InnerException != null)
                                        {
                                            response.Write(e.InnerException.Message);
                                            response.Write("<br/>");
                                        }
                                        isError = true;
                                        response.Flush();
                                    }
                                }
                            }
                            response.Flush();
                        }
                        response.Flush();
                    }
                    if (!isError)
                    {
                        response.Write("Файл успешно обработан!");
                    }
                }
                finally
                {
                    System.IO.File.Delete(physicalFilePath);
                }
            }
        }
Beispiel #10
0
        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);
                        }
                    }
                }
            }
        }
Beispiel #11
0
//        public ActionResult Update(string id)
        //public ActionResult Update(WorkerNorma workerNorma)
        public ActionResult Update([Bind(Prefix = "updated")] IEnumerable <WorkerNorma> workerNormas)
        {
            //int workerWorkplaceId = (int)HttpContext.Cache.Get("workerWorkplaceId");
            int      workerWorkplaceId = (int)Session["workerWorkplaceId"];
            string   docNumber         = null;
            DateTime?docDate           = null;
            OperType operType          = null;
            DateTime?operDate          = null;
            Motiv    motiv             = null;
            Cause    cause             = null;


            Dictionary <string, object> query = new Dictionary <string, object>();

            query.Add("Id", workerWorkplaceId);
            WorkerWorkplace workerWorkplace = workerWorkplaceRepository.Get(workerWorkplaceId);

            query.Clear();
            query.Add("WorkerWorkplace", workerWorkplace);

            WorkerCardHead workerCardHead = workerCardRepository.FindOne(query);

            if (workerNormas != null)
            {
                int i = -1;
                foreach (var workerNorma in workerNormas)
                {
                    i++;
                    if (i == 0)
                    {
                        docNumber = workerNorma.DocNumber;
                        //DateTime docDate = DateTime.ParseExact(workerNorma.DocDate, DataGlobals.DATE_FORMAT, null);
                        docDate  = workerNorma.DocDate;
                        operType = operTypeRepository.Get(workerNorma.OperTypeId);
                        motiv    = motivRepository.Get(workerNorma.MotivId);
                        query.Clear();
                        query.Add("Id", workerNorma.CauseId);

                        cause = causeRepository.FindOne(query);

                        operDate = workerNorma.DocDate;

                        if (DateTime.Today > operDate)
                        {
                            operDate = operDate.Value.AddHours(21).AddMinutes(0).AddSeconds(0);
                        }
                        else
                        {
                            operDate = operDate.Value.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute).AddSeconds(DateTime.Now.Second);
                        }
                    }

                    if (workerNorma.PutQuantity <= 0)
                    {
                        continue;
                    }

                    WorkerCardContent workerCardContentPresent = getWorkerCard(workerNorma.Id, workerCardHead);

                    if (workerNorma.PutQuantity <= 0)
                    {
                        ModelState.AddModelError(workerCardContentPresent.Storage.Nomenclature.Name, "Списать можно кол-во больше 0");
                    }

                    if (workerNorma.PutQuantity > workerCardContentPresent.Quantity)
                    {
                        ModelState.AddModelError(workerCardContentPresent.Storage.Nomenclature.Name, "Списать можно не больше чем есть на руках");
                    }


                    if (string.IsNullOrEmpty(docNumber) || docDate == null)
                    {
                        ModelState.AddModelError("updated[" + i + "].StorageName", "Номер и дата документа должны быть заполнены");
                    }

                    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)
                    {
                        ModelState.AddModelError(operDate + ": ", "Период закрыт для изменений");
                    }
                }

                if (ModelState.IsValid)
                {
                    foreach (var workerNorma in workerNormas)
                    {
                        if (workerNorma.PutQuantity <= 0)
                        {
                            continue;
                        }

                        WorkerCardContent workerCardContentPresent = getWorkerCard(workerNorma.Id, workerCardHead);

                        Operation oper = new Operation();
                        oper.OperDate        = operDate.Value;
                        oper.OperType        = operTypeRepository.Get(DataGlobals.OPERATION_WORKER_OUT);
                        oper.Organization    = organizationRepository.Get(workerWorkplace.RootOrganization);
                        oper.Quantity        = workerNorma.PutQuantity;
                        oper.Storage         = workerCardContentPresent.Storage;
                        oper.DocNumber       = docNumber;
                        oper.DocDate         = docDate.Value;
                        oper.WorkerWorkplace = workerWorkplace;
                        oper.Motiv           = motiv;
                        oper.Cause           = cause;
                        oper.OperType        = operType;
                        oper.GiveOperation   = workerCardContentPresent.GiveOperation;

                        //workerCardContentPresent.Operation = oper;
                        //workerCardContentPresent.Quantity -= oper.Quantity;
                        if (workerNorma.PutQuantity == workerCardContentPresent.Quantity)
                        {
                            workerCardHead.WorkerCardContents.Remove(workerCardContentPresent);
                        }
//Теперь позиции на карточки не удаляем
//                        workerCardContentRepository.Delete(workerCardContentPresent);

                        operationRepository.SaveOrUpdate(oper);
                        if (workerNorma.PutQuantity == workerCardContentPresent.Quantity)
                        {
                            workerCardContentPresent.OperReturn = oper;
                            workerCardContentPresent.Quantity   = 0;
                            workerCardContentPresent.EndDate    = oper.OperDate;
                        }
                        else
                        {
                            workerCardContentPresent.Quantity = workerCardContentPresent.Quantity - workerNorma.PutQuantity;
                            WorkerCardContent wcc = new WorkerCardContent();
                            wcc.Quantity       = 0;
                            wcc.StartDate      = workerCardContentPresent.StartDate;
                            wcc.EndDate        = operDate.Value;
                            wcc.WorkerCardHead = workerCardContentPresent.WorkerCardHead;
                            wcc.Storage        = workerCardContentPresent.Storage;
                            wcc.Operation      = workerCardContentPresent.Operation;
                            wcc.OperReturn     = oper;
                            wcc.NormaContent   = workerCardContentPresent.NormaContent;
                            wcc.GiveOperation  = workerCardContentPresent.GiveOperation;
                            workerCardContentRepository.SaveOrUpdate(wcc);
                        }
                        workerCardContentRepository.SaveOrUpdate(workerCardContentPresent);

                        //workerCardRepository.SaveOrUpdate(workerCardHead);
                    }
                }
            }
            return(Select(workerWorkplaceId, (string)Session["workerWorkplaceText"]));
        }
Beispiel #12
0
        public ActionResult CancelOper()
        {
            int workerWorkplaceId = (int)Session["workerWorkplaceId"];

            Dictionary <string, object> query = new Dictionary <string, object>();
            Dictionary <string, object> order = new Dictionary <string, object>();

            query.Add("WorkerWorkplace.Id", workerWorkplaceId);
            query.Add("OperType.Id", DataGlobals.OPERATION_WORKER_OUT);
            query.Add("OperDate", DateTime.Today);

            IList <Operation> operations = operationRepository.GetByLikeCriteria(query);

            string lastDocNumber = "-1";

            foreach (var item in operations)
            {
                if (int.Parse(item.DocNumber) > int.Parse(lastDocNumber))
                {
                    lastDocNumber = item.DocNumber;
                }
            }

            query.Clear();
            query.Add("WorkerWorkplace.Id", workerWorkplaceId);
            WorkerCardHead workerCardHead = workerCardRepository.GetByCriteria(query)[0];

            WorkerCardContent workerCardContent = null;

            foreach (var item in operations)
            {
                if (item.DocNumber != lastDocNumber)
                {
                    continue;
                }

                // ищем операцию по которой выдавалось
                query.Clear();
                order.Clear();
                query.Add("WorkerWorkplace.Id", workerWorkplaceId);
                query.Add("Storage.Id", item.Storage.Id);
                query.Add("OperType.Id", DataGlobals.OPERATION_WORKER_IN);
                order.Add("OperDate", DESC);
                Operation operation = operationRepository.GetByLikeCriteria(query, order)[0];

                workerCardContent = new WorkerCardContent();
                workerCardContent.WorkerCardHead = workerCardHead;
                workerCardContent.Operation      = operation;
                workerCardContent.Storage        = item.Storage;
                workerCardContent.Quantity       = item.Quantity;

                workerCardHead.WorkerCardContents.Add(workerCardContent);

                workerCardContentRepository.SaveOrUpdate(workerCardContent);

                operationRepository.Delete(item);
            }

            workerCardRepository.SaveOrUpdate(workerCardHead);

            //return Index();
            //return RedirectToAction("Index");
            //return Select(workerWorkplaceId, (string)Session["workerWorkplaceText"], (string)Session["storageNameId"] );
            return(null);
        }
        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));
        }