How Can We Help?

← Wszystkie tematy
Jesteś tu:

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;    
     }   
   }  
}
Spis treści