コード例 #1
0
ファイル: ProductionService.cs プロジェクト: MichalTecl/Elsa
        public void ProcessRequest(ProductionRequest request)
        {
            lock (s_lock)
            {
                using (var tx = m_database.OpenTransaction())
                {
                    var context = Validate(request);

                    if (!request.IsValid)
                    {
                        throw new InvalidOperationException(request.Messages.FirstOrDefault()?.Text ??
                                                            request.Components.SelectMany(c => c.Messages)
                                                            .FirstOrDefault()?.Text ??
                                                            "chyba :(");
                    }

                    var components = new List <Tuple <BatchKey, Amount> >();

                    foreach (var component in request.Components)
                    {
                        foreach (var aloc in component.Resolutions.Where(r => r.Amount > 0m))
                        {
                            components.Add(new Tuple <BatchKey, Amount>(new BatchKey(component.MaterialId, aloc.BatchNumber), new Amount(aloc.Amount, m_unitRepository.GetUnitBySymbol(aloc.UnitSymbol).Ensure())));
                        }
                    }

                    m_batchRepository.Value.CreateBatchWithComponents(request.RecipeId, context.RequestedAmount,
                                                                      request.ProducingBatchNumber.Trim(), request.ProducingPrice ?? 0, components, request.SourceSegmentId);

                    tx.Commit();
                }
            }
        }
コード例 #2
0
        public void ProcProdSched_WriteSchedulingParameters()
        {
            // Testing the writing of scheduling parameters

            // Creating a schedule to be serialised
            var schedule    = new ProductionSchedule();
            var testObject1 = new ProcessProductionSchedule();

            testObject1.ProductionSchedules.Add(schedule);

            var schedulingParameters = new CMeas.Item_DataRecord()
            {
                { "myparam", new CMeas.Item_Count(3) }
            };

            // Creating a production request with scheduling parameters
            var productionRequest = new ProductionRequest
            {
                // Setting scheduling parameters. Not testing the parameters thorougly
                // because the data record is tested elsewhere.
                SchedulingParameters = schedulingParameters.ToDataRecordPropertyProxy()
            };

            schedule.ProductionRequests.Add(productionRequest);

            // Serialising validating and deserialising. The test will likely fails here if it fails.
            var xmlData   = testObject1.ToXmlBytes();
            var xmlString = System.Text.Encoding.UTF8.GetString(xmlData); // Just for debugging

            Validate(xmlData);

            // Asserting
            AssertSchedulingParameters(new ProcessProductionSchedule(xmlData));
        }
コード例 #3
0
        public ProductionRequestContext(ISession session, ProductionRequest request)
        {
            Session = session;
            Request = request;

            request.IsValid = true;
        }
コード例 #4
0
ファイル: PPS_SCH_001_Report.cs プロジェクト: Cliedy-s/Team4
        private void TsbtnPrint_Click(object sender, EventArgs e)
        {
            ProductionRequest rpt = new ProductionRequest();

            rpt.DataSource = dt;
            using (ReportPrintTool printTool = new ReportPrintTool(rpt))
            {
                printTool.ShowRibbonPreviewDialog();
            }
        }
コード例 #5
0
        private void dgwStockEntranceList_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (modeReport == 1)
            {
                DataGridViewRow currentRow = dgwStockEntranceList.Rows[e.RowIndex];
                string          RecordCode = ObjectHelper.GetValueFromAnonymousType <string>(currentRow.DataBoundItem, "RecordCode");
                string          prefix     = RecordCode.Substring(0, 2);
                switch (prefix)
                {
                case BHConstant.PREFIX_FOR_ORDER:
                {
                    OrderService orderService = new OrderService();
                    Order        order        = orderService.GetOrders().Where(o => o.OrderCode == RecordCode).FirstOrDefault();
                    if (order != null)
                    {
                        AddOrder frmAddOrder = new AddOrder();
                        frmAddOrder.loadDataForEditOrder(order.Id);

                        frmAddOrder.CallFromUserControll = this;
                        frmAddOrder.ShowDialog();
                    }
                } break;

                case BHConstant.PREFIX_FOR_ENTRANCE:
                {
                    EntranceStockService stockService = new EntranceStockService();
                    EntranceStock        stock        = stockService.GetEntranceStocks().Where(r => r.EntranceCode == RecordCode).FirstOrDefault();
                    if (stock != null)
                    {
                        AddEntranceStock frmAddEntranceStock = new AddEntranceStock();
                        frmAddEntranceStock.loadDataForEditEntranceStock(stock.Id);

                        frmAddEntranceStock.CallFromUserControll = this;
                        frmAddEntranceStock.ShowDialog();
                    }
                } break;

                case BHConstant.PREFIX_FOR_PRODUCTION:
                {
                    ProductionRequestService requestService = new ProductionRequestService();
                    ProductionRequest        request        = requestService.GetProductionRequests().Where(r => r.ReqCode == RecordCode).FirstOrDefault();
                    if (request != null)
                    {
                        AddProductionRequest addProductionRequest = new AddProductionRequest();
                        addProductionRequest.loadDataForEditProductRequest(request.Id);

                        addProductionRequest.CallFromUserControll = this;
                        addProductionRequest.ShowDialog();
                    }
                } break;
                }
            }
        }
コード例 #6
0
ファイル: ProductionService.cs プロジェクト: MichalTecl/Elsa
        public void ValidateRequest(ProductionRequest request)
        {
            //TODO i wouldn't even try to process multiple allocations in parallel, but should be optimized to lock by user (project?)
            lock (s_lock)
            {
                using (var tx = m_database.OpenTransaction())
                {
                    Validate(request);

                    tx.Commit();
                }
            }
        }
コード例 #7
0
        private IEnumerable <Sandwich> DoBatch(ProductionRequest productionRequest)
        {
            List <Sandwich> result = new List <Sandwich>(productionRequest.Count);

            for (int i = 0; i < productionRequest.Count; i++)
            {
                var requested = Produce(productionRequest.Kind);
                result.Add(requested);
            }

            Console.WriteLine("[V: {0}] Batch made: {1} of {2}", Name, productionRequest.Count, productionRequest.Kind);

            return(result);
        }
コード例 #8
0
ファイル: ProductionService.cs プロジェクト: MichalTecl/Elsa
        private ProductionRequestContext Validate(ProductionRequest request)
        {
            var context = new ProductionRequestContext(m_session, request);

            foreach (var step in GetSteps())
            {
                step.Process(context);
            }

            request.IsFirstRound = false;
            request.IsValid      = request.IsValid && request.Components.All(c => c.IsValid);

            return(context);
        }
コード例 #9
0
        private void BtnPrDown_Click(object sender, EventArgs e)
        {
            bool      bFlag = false;
            DataTable dt    = new DataTable();

            List <Wo_Req_ItemVO> list = dgvMainGrid.DataSource as List <Wo_Req_ItemVO>;

            for (int i = 0; i < list.Count; i++)
            {
                if (dgvMainGrid.Rows[i].Cells[0] is DataGridViewCheckBoxCell chk)
                {
                    if (Convert.ToBoolean(chk.Value))
                    {
                        bFlag = true;
                        reportList.Add(list[i]);
                    }
                    else
                    {
                        continue;
                    }
                }
            }
            dt = ListToDataTable.ToDataTable(reportList);
            ProductionRequest rpt = new ProductionRequest();

            rpt.DataSource = dt;
            if (bFlag)
            {
                PPS_SCH_001_Report frm = new PPS_SCH_001_Report(dt);
                frm.documentViewer1.DocumentSource = null;
                frm.documentViewer1.DocumentSource = rpt;
                frm.MdiParent   = MdiParent;
                frm.WindowState = FormWindowState.Maximized;
                frm.Show();

                TabPage newTab = new TabPage();
                newTab.Tag  = frm.Name;
                newTab.Text = "생산의뢰목록";
                frm.Tag     = frm.Name;
                ((MainForm)this.MdiParent).tabControl2.TabPages.Add(newTab);
            }
            else
            {
                MessageBox.Show("목록을 선택해 주세요.", "작업지시관리", MessageBoxButtons.OK);
            }
        }
コード例 #10
0
        private void ResolveRequests(IEnumerable <ProductionRequest> requests)
        {
            ProductionRequest requestToCarryOut = null;

            foreach (var nextRequest in requests)
            {
                if (requestToCarryOut == null || requestToCarryOut.Project.Progress < nextRequest.Project.Progress)
                {
                    requestToCarryOut = nextRequest;
                }
            }

            if (requestToCarryOut != null)
            {
                requestToCarryOut.Project.Execute(requestToCarryOut.RequestingCity);
            }
        }
コード例 #11
0
        private void ProcessResolutions(ProductionRequest request, IRecipeComponent recipeComponent, ProductionComponent requestComponent, decimal multiplier, DateTime sourceBatchesMadeBefore)
        {
            if (TryProcessTransformationInput(request, recipeComponent, requestComponent) && (!requestComponent.IsValid))
            {
                return;
            }

            var requiredAmount = new Amount(recipeComponent.Amount * multiplier, m_unitRepository.GetUnit(recipeComponent.UnitId));

            ClearUserAllocationsIfQuantityChanged(requestComponent, requiredAmount);

            var requiredBatchNr = recipeComponent.IsTransformationInput ? request.ProducingBatchNumber : null;
            var resolutions     = m_batchFacade.ResolveMaterialDemand(
                recipeComponent.MaterialId,
                requiredAmount,
                requiredBatchNr,
                false,
                true,
                sourceBatchesMadeBefore,
                request.SourceSegmentId);

            RemoveComponentsNotProposedBySystem(requestComponent, resolutions, requiredAmount);
            AddMissingComponents(requestComponent, resolutions, requiredAmount, request.SourceSegmentId != null && request.IsFirstRound);

            var userAllocatedAmount =
                m_amountProcessor.Sum(requestComponent.Resolutions.Where(r => r.GetAmount(m_unitRepository) != null)
                                      .Select(r => r.GetAmount(m_unitRepository))) ?? new Amount(0, requiredAmount.Unit);

            var remaining = m_amountProcessor.Subtract(requiredAmount, userAllocatedAmount);

            if (!resolutions.CompletelyAllocated)
            {
                requestComponent.Invalidate("Potřebné množství není dostupné");
            }

            if (remaining.IsPositive)
            {
                //seems we allocated the requested amount
                requestComponent.Invalidate($"Zbývá vložit {remaining}");
            }
            else if (remaining.IsNegative)
            {
                requestComponent.Invalidate($"Přebývá {m_amountProcessor.Neg(remaining)}");
            }
        }
コード例 #12
0
        public void Execute(ProductionRequest request)
        {
            switch (request.CallCase)
            {
            case ProductionRequest.CallOneofCase.None:
                break;

            case ProductionRequest.CallOneofCase.ClearBuildOrder:
                _manager.ClearBuildOrder();
                break;

            case ProductionRequest.CallOneofCase.QueueUnit:
                _manager.QueueUnit(request.QueueUnit.UnitId, request.QueueUnit.Pos, request.QueueUnit.Spacing, request.QueueUnit.Skippable);
                break;

            case ProductionRequest.CallOneofCase.QueueTech:
                _manager.QueueTech(request.QueueTech.UpgradeId, request.QueueTech.Skippable);
                break;
            }
        }
コード例 #13
0
        private static bool TryProcessTransformationInput(ProductionRequest request, IRecipeComponent recipeComponent,
                                                          ProductionComponent requestComponent)
        {
            if (recipeComponent.IsTransformationInput)
            {
                for (var i = requestComponent.Resolutions.Count - 1; i >= 0; i--)
                {
                    if (requestComponent.Resolutions[i].BatchNumber
                        ?.Equals(request.ProducingBatchNumber ?? string.Empty) != true)
                    {
                        requestComponent.Resolutions.RemoveAt(i);
                    }
                }

                if (string.IsNullOrWhiteSpace(request.ProducingBatchNumber))
                {
                    requestComponent.Invalidate("Receptura vyžaduje shodné číslo šarže");
                }

                return(true);
            }

            return(false);
        }
コード例 #14
0
 public void ProcessProductionRequest(ProductionRequest request)
 {
     m_productionService.ProcessRequest(request.Ensure("Request object required"));
 }
コード例 #15
0
        public IActionResult Post([FromBody] ProductionRequest t)
        {
            List <OrganizationProductions> organizationProductionsList = new List <OrganizationProductions>();


            Parallel.ForEach(t.organizations, organization =>
            {
                OrganizationProductions organizationProductions  = new OrganizationProductions();
                List <CentralProductions> centralProductionsList = new List <CentralProductions>();
                Parallel.ForEach(organization.centrals, central =>
                {
                    CentralProductions centralProductions = new CentralProductions();
                    Parallel.ForEach(t.types, type =>
                    {
                        if (type == 0)
                        {
                            string kgupString = Api.GetRequest($"https://seffaflik.epias.com.tr/transparency/service/production/dpp?organizationEIC={organization.etso}&uevcbEIC={central.eic}&startDate={t.start}&endDate={t.end}");
                            JsonElement json  = JsonDocument.Parse(kgupString).RootElement;
                            var kgoek         = new KgupOrEak();
                            foreach (var hour in json.GetProperty("body").GetProperty("dppList").EnumerateArray())
                            {
                                var field = new KgupOrEakField
                                {
                                    date = hour.GetProperty("tarih").GetString(),
                                    sum  = hour.GetProperty("toplam").GetDouble()
                                };
                                kgoek.hourly.Add(field);
                            }
                            kgoek.hourly = kgoek.hourly.OrderBy(o => o.date).ToList();
                            foreach (var day in json.GetProperty("body").GetProperty("statistics").EnumerateArray())
                            {
                                var field = new KgupOrEakField
                                {
                                    date = day.GetProperty("tarih").GetString(),
                                    sum  = day.GetProperty("toplamSum").GetDouble()
                                };
                                kgoek.daily.Add(field);
                            }
                            kgoek.daily = kgoek.daily.OrderBy(o => o.date).ToList();
                            centralProductions.types.kgup = kgoek;
                        }
                        else if (type == 1)
                        {
                            string eakString = Api.GetRequest($"https://seffaflik.epias.com.tr/transparency/service/production/aic?organizationEIC={organization.etso}&uevcbEIC={central.eic}&startDate={t.start}&endDate={t.end}");
                            JsonElement json = JsonDocument.Parse(eakString).RootElement;
                            var kgoek        = new KgupOrEak();
                            foreach (var hour in json.GetProperty("body").GetProperty("aicList").EnumerateArray())
                            {
                                var field = new KgupOrEakField
                                {
                                    date = hour.GetProperty("tarih").GetString(),
                                    sum  = hour.GetProperty("toplam").GetDouble()
                                };
                                kgoek.hourly.Add(field);
                            }
                            kgoek.hourly = kgoek.hourly.OrderBy(o => o.date).ToList();
                            foreach (var day in json.GetProperty("body").GetProperty("statistics").EnumerateArray())
                            {
                                var field = new KgupOrEakField
                                {
                                    date = day.GetProperty("tarih").GetString(),
                                    sum  = day.GetProperty("toplamSum").GetDouble()
                                };
                                kgoek.daily.Add(field);
                            }
                            kgoek.daily = kgoek.daily.OrderBy(o => o.date).ToList();
                            centralProductions.types.eak = kgoek;
                        }
                        else if (type == 2)
                        {
                            string urgentString   = Api.GetRequest($"https://seffaflik.epias.com.tr/transparency/service/production/urgent-market-message?startDate={t.start}&endDate={t.end}&regionId=1&uevcbId={central.id}");
                            JsonElement json      = JsonDocument.Parse(urgentString).RootElement;
                            List <Urgent> urgents = new List <Urgent>();
                            foreach (var u in json.GetProperty("body").GetProperty("urgentMarketMessageList").EnumerateArray())
                            {
                                var urgent = new Urgent
                                {
                                    urgentStartDate = u.GetProperty("caseStartDate").GetString(),
                                    hourly          = new List <UrgentField>()
                                };
                                foreach (var h in u.GetProperty("faultDetails").EnumerateArray())
                                {
                                    var urgentField = new UrgentField
                                    {
                                        date      = h.GetProperty("date").GetString(),
                                        powerLoss = h.GetProperty("faultCausedPowerLoss").GetDouble()
                                    };
                                    urgent.hourly.Add(urgentField);
                                }
                                urgent.hourly = urgent.hourly.OrderBy(o => o.date).ToList();

                                urgent.type   = u.GetProperty("messageType").GetInt32();
                                urgent.reason = u.GetProperty("reason").GetString();
                                urgents.Add(urgent);
                            }
                            centralProductions.types.urgent = urgents;
                        }
                    });
                    centralProductions.name = central.name;
                    centralProductions.id   = central.id;
                    centralProductions.eic  = central.eic;
                    centralProductionsList.Add(centralProductions);
                });
                organizationProductions.name = organization.name;
                organizationProductions.etso = organization.etso;
                organizationProductions.centralProductions = centralProductionsList;
                organizationProductionsList.Add(organizationProductions);
            });
            return(Ok(organizationProductionsList));
        }
コード例 #16
0
        public ProductionRequest ValidateProductionRequest(ProductionRequest request)
        {
            m_productionService.ValidateRequest(request.Ensure("Request object required"));

            return(request);
        }
コード例 #17
0
        public void ProcProdSched_Write()
        {
            // Serialising, validating and deserialising
            byte[] xmlData = CreateObjectForTestWrite().ToXmlBytes();
            Validate(xmlData);
            ProcessProductionSchedule testObject2 = new ProcessProductionSchedule(xmlData);

            // Assert creation time
            TestCommon.TestHelper.AssertDateTime(ParseDateTimeInUtc("2019-05-09T12:20:19Z"), testObject2.CreationDateTime);

            ProductionSchedule schedule = testObject2.ProductionSchedules[0];

            // Assert request count
            Assert.AreEqual(2, schedule.ProductionRequests.Count);

            // Asserting a production request
            ProductionRequest request1 = schedule.ProductionRequests[0];

            Assert.AreEqual(2, request1.SegmentRequirements.Count);

            // Asserting identifier
            Assert.AreEqual("some-id", request1.Identifier.Value);

            // Asserting a hierarchy scope
            Assert.AreEqual("psc3", request1.HierarchyScopeObj.EquipmentIdentifier.Value);
            Assert.AreEqual(EquipmentElementLevelType.ProcessCell, request1.HierarchyScopeObj.EquipmentElementLevel);

            // Asserting a segment requirement
            SegmentRequirement segReq = request1.SegmentRequirements[0];

            Assert.AreEqual("1", segReq.ProcessSegmentIdentifier.Value);
            AssertDateTime(ParseDateTimeInUtc("2019-05-09T13:36:02Z"), segReq.EarliestStartTime.Value);
            AssertDateTime(ParseDateTimeInUtc("2019-05-09T13:37:02Z"), segReq.LatestEndTime.Value);
            Assert.AreEqual(1, segReq.MaterialRequirements.Count);
            Assert.AreEqual(1, segReq.EquipmentRequirements.Count);

            // Asserting nested segment requirement
            SegmentRequirement segReqNested = segReq.SegmentRequirements[0];

            AssertDateTime(ParseDateTimeInUtc("2019-08-29T15:31:38Z"), segReqNested.EarliestStartTime.Value);

            // Asserting equipment requirement
            EquipmentRequirement eqReq = segReq.EquipmentRequirements[0];

            Assert.AreEqual(1, eqReq.Quantities.Count);
            Assert.IsTrue(eqReq.Quantities[0].TryParseValueAsXmlBoolean());

            MaterialRequirement matReq = segReq.MaterialRequirements[0];

            // Asserting material definition ID
            Assert.AreEqual(1, matReq.MaterialDefinitionIdentifiers.Count);
            Assert.AreEqual("slag", matReq.MaterialDefinitionIdentifiers[0].Value);

            // Asserting a material lot ID
            Assert.AreEqual(1, matReq.MaterialLotIdentifiers.Count);
            Assert.AreEqual("my-lot-1", matReq.MaterialLotIdentifiers[0].Value);

            // Asserting material use
            Assert.AreEqual(MaterialUseType.Produced, matReq.MaterialUse.Value);

            // Asserting a material quantity
            Assert.AreEqual(1, matReq.Quantities.Count);
            QuantityValue quantity = matReq.Quantities[0];

            Assert.AreEqual("12.2", quantity.RawQuantityString);
            Assert.AreEqual(12.2, quantity.TryParseValueAsXmlDouble(), 0.001);
            Assert.AreEqual("t", quantity.UnitOfMeasure);
            Assert.AreEqual(DataType.TypeType.doubleXml, quantity.DataType.Type);
            Assert.AreEqual("my-mat-key", quantity.Key.Value);

            // Asserting an assembly requirement
            Assert.AreEqual(1, matReq.AssemblyRequirements.Count);
            Assert.AreEqual("Ni", matReq.AssemblyRequirements[0].MaterialDefinitionIdentifiers[0].Value);
        }
コード例 #18
0
        private ProcessProductionSchedule CreateObjectForTestWrite()
        {
            // Applying identifiers (such as "SEG1") to items to enable a
            // verification that this test implementation has same items
            // as those in other environments, particularly Java.

            // SEG1a Creating a segment requirement
            SegmentRequirement segReq1 = new SegmentRequirement
            {
                ProcessSegmentIdentifier = new IdentifierType("1"),
                EarliestStartTime        = ParseDateTimeInUtc("2019-05-09T13:36:02Z"),
                LatestEndTime            = ParseDateTimeInUtc("2019-05-09T13:37:02Z")
            };

            // EQ1 Add equipment requirement
            EquipmentRequirement eqReq = new EquipmentRequirement()
            {
                Quantities = new List <QuantityValue>()
                {
                    new QuantityValue(true)
                }
            };

            segReq1.EquipmentRequirements.Add(eqReq);

            // MAT1 Add material requirement
            MaterialRequirement matReq = new MaterialRequirement()
            {
                MaterialDefinitionIdentifiers = new List <IdentifierType>()
                {
                    new IdentifierType("slag")
                },

                MaterialLotIdentifiers = new List <IdentifierType>()
                {
                    new IdentifierType("my-lot-1")
                },

                MaterialUse = new MaterialUse(MaterialUseType.Produced),

                Quantities = new List <QuantityValue>()
                {
                    new QuantityValue(12.2)
                    {
                        UnitOfMeasure = "t",
                        Key           = new IdentifierType("my-mat-key")
                    }
                },

                AssemblyRequirements = new List <MaterialRequirement>()
                {
                    new MaterialRequirement()
                    {
                        MaterialDefinitionIdentifiers = new List <IdentifierType>()
                        {
                            new IdentifierType("Ni")
                        }
                    }
                }
            };

            segReq1.MaterialRequirements.Add(matReq);

            // SEG1-1 Add nested segment requirement
            segReq1.SegmentRequirements.Add(new SegmentRequirement()
            {
                EarliestStartTime = ParseDateTimeInUtc("2019-08-29T15:31:38Z")
            });

            // PROD1a Create one production request (for the unit "psc3")
            ProductionRequest request1 = new ProductionRequest
            {
                // PROD1-ID Set identifier
                Identifier = new IdentifierType("some-id"),

                // PROD1-HS Set hierarchy scope
                HierarchyScopeObj = new HierarchyScope(
                    new IdentifierType("psc3"),
                    EquipmentElementLevelType.ProcessCell
                    ),

                SegmentRequirements = new List <SegmentRequirement>()
                {
                    // SEG1b Add segment requirement to production request
                    segReq1,

                    // SEG2 Add another (empty) segment requirement
                    new SegmentRequirement()
                }
            };

            // SCH Create schedule object
            ProductionSchedule schedule = new ProductionSchedule()
            {
                ProductionRequests = new List <ProductionRequest>()
                {
                    // PROD1b Add the production request to schedule
                    request1,

                    // PROD2 Adding another (empty) production request
                    new ProductionRequest()
                }
            };

            // PROPS Creating object to be serialised
            ProcessProductionSchedule testObject1 = new ProcessProductionSchedule()
            {
                // PROPS-CR Set creation time
                CreationDateTime = ParseDateTimeInUtc("2019-05-09T12:20:19Z")
            };

            // Add schedule to the test object
            testObject1.ProductionSchedules.Add(schedule);
            return(testObject1);
        }
コード例 #19
0
        private void dgwRequestList_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (sender is DataGridView)
            {
                DataGridViewCell cell = ((DataGridView)sender).CurrentCell;
                if (cell.ColumnIndex == ((DataGridView)sender).ColumnCount - 1)
                {
                    DialogResult result = MessageBox.Show("Bạn có muốn xóa phiếu sản xuât này?",
                                                          "Xoá phiếu sản xuât",
                                                          MessageBoxButtons.YesNo,
                                                          MessageBoxIcon.Question);
                    if (result == DialogResult.Yes)
                    {
                        DataGridViewRow currentRow = dgwRequestList.Rows[e.RowIndex];

                        ProductionRequestService       productionRequestService       = new ProductionRequestService();
                        ProductionRequestDetailService productionRequestDetailService = new ProductionRequestDetailService();
                        int id = ObjectHelper.GetValueFromAnonymousType <int>(currentRow.DataBoundItem, "Id");
                        ProductionRequest pr = productionRequestService.GetProductionRequest(id);
                        List <ProductionRequestDetail> productionRequestDetails = productionRequestDetailService.GetProductionRequestDetails().Where(p => p.ProductionRequestId == id).ToList();
                        bool     ret     = false;
                        DateTime systime = BaoHienRepository.GetBaoHienDBDataContext().GetSystemDate();

                        ProductLogService productLogService = new ProductLogService();
                        string            msg = "";
                        int        error = 0, amount = 0;
                        ProductLog pl, newpl;
                        foreach (ProductionRequestDetail item in productionRequestDetails)
                        {
                            pl     = productLogService.GetProductLog(item.ProductId, item.AttributeId, item.UnitId);
                            amount = (item.Direction == BHConstant.DIRECTION_OUT) ? -item.NumberUnit : item.NumberUnit;
                            if (pl.AfterNumber - amount < 0)
                            {
                                if (error == 0)
                                {
                                    msg  += "Những sản phẩm sau đã bị XÓA nhưng không đảm bảo dữ liệu trong kho:\n";
                                    error = 1;
                                }
                                msg += "- " + productLogService.GetNameOfProductLog(pl) + " : " + item.NumberUnit + "\n";
                            }
                        }
                        if (error > 0)
                        {
                            MessageBox.Show(msg, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return;
                        }
                        foreach (ProductionRequestDetail item in productionRequestDetails)
                        {
                            pl     = productLogService.GetProductLog(item.ProductId, item.AttributeId, item.UnitId);
                            amount = (item.Direction == BHConstant.DIRECTION_OUT) ? -item.NumberUnit : item.NumberUnit;
                            newpl  = new ProductLog()
                            {
                                ProductId    = item.ProductId,
                                AttributeId  = item.AttributeId,
                                UnitId       = item.UnitId,
                                BeforeNumber = pl.AfterNumber,
                                Amount       = item.NumberUnit,
                                AfterNumber  = pl.AfterNumber - amount,
                                RecordCode   = pr.ReqCode,
                                Status       = BHConstant.DEACTIVE_STATUS,
                                Direction    = !item.Direction,
                                UpdatedDate  = systime
                            };
                            productLogService.AddProductLog(newpl);
                        }
                        productLogService.DeactiveProductLog(pr.ReqCode);
                        if (!productionRequestService.DeleteProductionRequest(id))
                        {
                            MessageBox.Show("Hiện tại hệ thống đang có lỗi. Vui lòng thử lại sau!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        loadProductionRequestList();
                    }
                }
            }
        }
コード例 #20
0
        public void ProcProdSched_WriteEmptyItems()
        {
            // Testing if write works when there are empty items in the schedule

            // Create this production request here, because otherwise
            // there would be too many nested blocks to be readable
            var productionRequest3 = new ProductionRequest()
            {
                SegmentRequirements = new List <SegmentRequirement>()
                {
                    new SegmentRequirement()
                    {
                        EquipmentRequirements = new List <EquipmentRequirement>()
                        {
                            new EquipmentRequirement()
                            {
                                // 3) Empty equipment requirement
                            }
                        },

                        MaterialRequirements = new List <MaterialRequirement>()
                        {
                            new MaterialRequirement()
                            {
                                // 4) Empty material requirement
                            },
                            new MaterialRequirement()
                            {
                                Quantities = new List <QuantityValue>()
                                {
                                    // 5) Empty quantity value
                                    new QuantityValue((string)null)
                                }
                            }
                        }
                    }
                }
            };

            var testObject1 = new ProcessProductionSchedule()
            {
                ProductionSchedules = new List <ProductionSchedule>()
                {
                    new ProductionSchedule()
                    {
                        ProductionRequests = new List <ProductionRequest>()
                        {
                            // 1) Empty production request
                            new ProductionRequest(),

                            new ProductionRequest()
                            {
                                HierarchyScopeObj = new HierarchyScope(
                                    new IdentifierType("psc2"),
                                    EquipmentElementLevelType.ProcessCell
                                    ),

                                SegmentRequirements = new List <SegmentRequirement>()
                                {
                                    // 2) Empty segment requirement
                                    new SegmentRequirement()
                                }
                            },

                            productionRequest3
                        }
                    }
                }
            };

            // Serialising, validating and deserialising. The test will likely fails here if it fails.
            var xmlData = testObject1.ToXmlBytes();

            Validate(xmlData);
            var testObjectIn = new ProcessProductionSchedule(xmlData);

            // Asserting
            AssertEmptyItemsDoc(testObjectIn);
        }