Exemple #1
0
        public ActionResult Delete(Motiv motiv)
        {
            motivRepository.Delete(motiv);
            IList <Motiv> motivs = motivRepository.GetAll();

            return(View(new GridModel(motivs)));
        }
Exemple #2
0
        public static Operation rebuildOperation(Operation inOperation, List <string> excludeProperty)
        {
            Operation outOperation = null;

            if (inOperation != null)
            {
                outOperation           = new Operation(inOperation.Id);
                outOperation.DocNumber = inOperation.DocNumber;
                outOperation.DocDate   = inOperation.DocDate;
                outOperation.Note      = inOperation.Note;
                outOperation.Wear      = inOperation.Wear;
                if (outOperation.Wear == null)
                {
                    outOperation.Wear = inOperation.Storage.Wear;
                }

                outOperation.Quantity = inOperation.Quantity;
                outOperation.OperDate = inOperation.OperDate;
                outOperation.Partner  = rebuildStorageName(inOperation.Partner);
                if (!isExclude(excludeProperty, "StorageName"))
                {
                    outOperation.StorageName = rebuildStorageName(inOperation.StorageName, rebuildExcludeProperty(excludeProperty, "StorageName"));
                }
                OperType ot = new OperType(inOperation.OperType.Id, inOperation.OperType.Name);
                outOperation.OperType = ot;
                if (!isExclude(excludeProperty, "Storage"))
                {
                    outOperation.Storage = rebuildStorage(inOperation.Storage, rebuildExcludeProperty(excludeProperty, "Storage"));
                }
                if (!isExclude(excludeProperty, "DocType"))
                {
                    if (inOperation.DocType != null)
                    {
                        DocType doct = new DocType(inOperation.DocType.Id, inOperation.DocType.Name);
                        outOperation.DocType = doct;
                    }
                }
                if (!isExclude(excludeProperty, "WorkerWorkplace"))
                {
                    WorkerWorkplace wwp    = new WorkerWorkplace();
                    Organization    org    = new Organization();
                    Worker          worker = new Worker();
                    wwp.Organization = org;
                    wwp.Worker       = worker;
                    if (inOperation.WorkerWorkplace != null)
                    {
                        wwp = rebuildWorkerWorkplaceSimple(inOperation.WorkerWorkplace, rebuildExcludeProperty(excludeProperty, "WorkerWorkplace"));
                    }
                    outOperation.WorkerWorkplace = wwp;
                }
                if (inOperation.Motiv != null)
                {
                    Motiv m = new Motiv(inOperation.Motiv.Id, inOperation.Motiv.Name);
                    outOperation.Motiv = m;
                }
            }
            return(outOperation);
        }
Exemple #3
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);
                }
            }
        }
Exemple #4
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"]));
        }