public FabricSKUIdCodeDto AutoCreateSKU(FabricSKUAutoCreateFormDto form)
        {
            var code          = "";
            var processType   = _dbContext.IPProcessType.FirstOrDefault(entity => entity.ProcessType == form.ProcessType);
            var processTypeId = 0;

            if (processType != null)
            {
                code         += processType.Code;
                processTypeId = processType.Id;
            }
            else
            {
                code         += "00";
                processTypeId = 0;
            }

            var yearCode = CodeConstructionHelper.GetYearCode(DateTime.Now.Year);

            code += yearCode;

            var sppNo = form.ProductionOrderNo.Substring(form.ProductionOrderNo.Length - 4);

            code += sppNo;

            var grade   = _dbContext.IPGrades.FirstOrDefault(entity => entity.Type == form.Grade);
            var gradeId = 0;

            if (grade != null)
            {
                code   += grade.Code;
                gradeId = grade.Id;
            }
            else
            {
                code   += "0";
                gradeId = 0;
            }

            var uom      = _dbContext.IPUnitOfMeasurements.FirstOrDefault(entity => entity.Unit == form.UOM);
            var category = _dbContext.IPCategories.FirstOrDefault(entity => entity.Name == "FABRIC");

            var model            = new ProductSKUModel();
            var productFabricSKU = new FabricProductSKUModel();

            if (uom != null && category != null)
            {
                model = new ProductSKUModel(code, code, uom.Id, category.Id, "");
                _unitOfWork.ProductSKUs.Insert(model);
                _unitOfWork.Commit();

                productFabricSKU = new FabricProductSKUModel(code, model.Id, 0, 0, 0, 0, 0, processTypeId, 0, gradeId, uom.Id);
                _unitOfWork.FabricSKUProducts.Insert(productFabricSKU);
                _unitOfWork.Commit();
            }
            return(new FabricSKUIdCodeDto()
            {
                FabricSKUId = productFabricSKU.Id, ProductSKUCode = code, ProductSKUId = model.Id
            });
        }
        public int CreateSKU(FabricSKUFormDto form)
        {
            var code = GenerateCode(form);

            if (_dbContext.ProductSKUs.Any(entity => entity.Code == code))
            {
                return(0);
            }

            var category = _dbContext.IPCategories.FirstOrDefault(entity => entity.Name == TYPE);

            var product = new ProductSKUModel(code, code, form.UOMId.GetValueOrDefault(), category.Id, "");

            _unitOfWork.ProductSKUs.Insert(product);
            _unitOfWork.Commit();

            var fabric = new FabricProductSKUModel(code, product.Id, form.WovenTypeId.GetValueOrDefault(), form.ConstructionId.GetValueOrDefault(), form.WidthId.GetValueOrDefault(), form.WarpId.GetValueOrDefault(), form.WeftId.GetValueOrDefault(), form.ProcessTypeId.GetValueOrDefault(), form.YarnTypeId.GetValueOrDefault(), form.GradeId.GetValueOrDefault(), form.UOMId.GetValueOrDefault());

            _unitOfWork.FabricSKUProducts.Insert(fabric);
            _unitOfWork.Commit();

            return(fabric.Id);
        }
        public FabricSKUIdCodeDto AutoCreateSKU(FabricSKUAutoCreateFormDto form)
        {
            var code          = "";
            var processType   = _dbContext.IPProcessType.FirstOrDefault(entity => entity.ProcessType == form.ProcessType);
            var processTypeId = 0;

            if (processType != null)
            {
                code         += processType.Code;
                processTypeId = processType.Id;
            }
            else
            {
                code         += "00";
                processTypeId = 0;
            }

            var yearCode = CodeConstructionHelper.GetYearCode(DateTime.Now.Year);

            code += yearCode;

            var sppNo = form.ProductionOrderNo.Substring(form.ProductionOrderNo.Length - 4);

            code += sppNo;

            var grade   = _dbContext.IPGrades.FirstOrDefault(entity => entity.Type == form.Grade);
            var gradeId = 0;

            if (grade != null)
            {
                code   += grade.Code;
                gradeId = grade.Id;
            }
            else
            {
                code   += "0";
                gradeId = 0;
            }

            var uom      = _dbContext.IPUnitOfMeasurements.FirstOrDefault(entity => entity.Unit == form.UOM);
            var category = _dbContext.IPCategories.FirstOrDefault(entity => entity.Name == "FABRIC");

            var model            = new ProductSKUModel();
            var productFabricSKU = new FabricProductSKUModel();

            if (uom != null && category != null)
            {
                model = new ProductSKUModel(code, code, uom.Id, category.Id, "");
                _unitOfWork.ProductSKUs.Insert(model);
                _unitOfWork.Commit();

                productFabricSKU = new FabricProductSKUModel(code, model.Id, 0, 0, 0, 0, 0, processTypeId, form.yarnMaterialId, gradeId, uom.Id,
                                                             form.materialId, form.materialName, form.materialConstructionId, form.materialConstructionName,
                                                             form.yarnMaterialId, form.yarnMaterialName, form.ProductionOrderNo, form.uomUnit, form.motif, form.color, form.Grade, form.Width);

                _unitOfWork.FabricSKUProducts.Insert(productFabricSKU);
                _unitOfWork.Commit();
            }
            else
            {
                var errorResult = new List <ValidationResult>()
                {
                    new ValidationResult("Satuan dan Kategori SKU tidak ditemukan periksa data master", new List <string> {
                        "UOMCategory"
                    })
                };
                var validationContext = new ValidationContext(model, _serviceProvider, null);
                throw new ServiceValidationException(validationContext, errorResult);
            }
            return(new FabricSKUIdCodeDto()
            {
                FabricSKUId = productFabricSKU.Id, ProductSKUCode = code, ProductSKUId = model.Id
            });
        }