How Can We Help?
Przykład cechy skryptowej do wyliczenia wartości wyrobu na PW
Poniżej znajduje się przykład cechy skryptowej rozliczenia zlecenia produkcyjnego wyliczającej wartość wyrobu na podstawie kosztów materiału i roboczogodzin poświęconych na jego wyprodukowanie. Obiekt, dla którego tworzymy cechę = WorkOrderIssue
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Worm;
using Unicore.Manufacture.Business;
namespace FeatureScript {
public static class Script {
public static Decimal GetValue(object obj) {
var issue = obj as WorkOrderIssue;
var workOrder = issue.WorkOrder;
const int roundUpTo = 6;
if (issue.ItemId == workOrder.WorkOrderLine.ItemId) {
var lastIssue = workOrder.Issues
.OrderBy(iss => iss.CreatedDate)
.LastOrDefault(iss => iss.Output
&& iss.ItemId == issue.ItemId
&& iss.Id != issue.Id);
var fromDate = lastIssue != null ?
lastIssue.CreatedDate : workOrder.CreatedDate;
var laborMinutes=workOrder.Labors.Where(emt=>
!(bool)(emt.RoutingLine.Process.Features["Pomijaj"].RestoreValue() ?? false))
.Sum(emt =>Convert.ToDecimal(emt.LaborTime.TotalMinutes));
var inputDocs = workOrder.Issues.Where(iss => iss.Input
&& iss.HMDocument != null
&& iss.HMDocument.StoreDocument != null
&& iss.HMDocument.CreatedDate > fromDate)
.Select(iss => iss.HMDocument.StoreDocument).Distinct().ToArray();
var planQty = workOrder.WorkOrderLine.PlanQty;
decimal laborTime;
var mod = (laborMinutes%6);
if (mod !=0) { laborTime =laborMinutes - mod + roundUpTo; }
else laborTime = laborMinutes;
var inputCost = inputDocs.Sum(sd => sd.NetValue);
var totalCost = (((Convert.ToDecimal(laborTime) / 60) * 90 + inputCost) / planQty);
return totalCost;
}
return 0;
}
}
}