# vim: ts=4 et sts=4 sw=4 autoindent import Pyro.core from sndcs.LaborDtlFactory import LaborDtlFactory from sndcs_common.SndcsExceptions import * from sndcs_common.PyroProxyMixin import PyroProxyMixin from sndcs.Config import config from sndcs_common.Logger import logger log = logger.getLogger("sndcsd") class LaborDtlProxyFactory(Pyro.core.ObjBase): def __init__(self): Pyro.core.ObjBase.__init__(self) # Get the Pyro namespace from the config self.namespace = config.get("pyro", "namespace", "sndcs") ### __init__ functions ### ### From LaborDtlFactory ### def setLaborDtlBySerialNum(self, serialNum): dtl = LaborDtlFactory().getLaborDtlBySerialNum(serialNum) if not dtl: raise SndcsLaborDtlError("No LaborDtl with serialNum = '%s'" % (serialNum)) proxy = LaborDtlProxy() proxy.namespace = self.namespace proxy.laborDtl = dtl self.getDaemon().connect(proxy) log.debug("Returning labor detail proxy object %s.", proxy) return proxy.getProxy() class LaborDtlProxy(Pyro.core.ObjBase, PyroProxyMixin): def getDataDict(self): """Utility to return laborDtl data in a dictionary""" return {"labordtl_id":self.labordtl_id(), "operation_id":self.operation_id(), "indirect_id":self.indirect_id(), "activeTrans":self.activeTrans(), "posted":self.posted(), "jobType":self.jobType(), "startStamp":self.startStamp(), "formattedDescription":self.formattedDescription(), "unitOfMeasure":self.unitOfMeasure(), "currentComplete":self.currentComplete(), "operationComplete":self.operationComplete(), "jobhed_qty_required": self.jobhed_qty_required(),"jobhed_qty_complete": self.jobhed_qty_complete() } ### Utilities ### ### From LaborDtl.py ### def formattedDescription(self): return self.laborDtl.formattedDescription() ### Getters and Setters ### def laborHed(self): """ Don't forget to call disconnect() on the proxy when you are done with it""" proxy_factory = Pyro.core.getProxyForURI(self.formatPyronameString(self.namespace, ["LaborHed"])) proxy = proxy_factory.setLaborHedBySerialNum(self.laborDtl.laborHed().serialNum()) return proxy def operation(self): """ Don't forget to call disconnect() on the proxy when you are done with it""" if self.laborDtl.operation(): proxy_factory = Pyro.core.getProxyForURI(self.formatPyronameString(self.namespace, ["Operation"])) proxy = proxy_factory.setOperationBySerialNum(self.laborDtl.operation().serialNum()) return proxy else: return None def indirect(self): """ Don't forget to call disconnect() on the proxy when you are done with it""" if self.laborDtl.indirect(): proxy_factory = Pyro.core.getProxyForURI(self.formatPyronameString(self.namespace, ["Indirect"])) proxy = proxy_factory.setIndirectBySerialNum(self.laborDtl.indirect().serialNum()) return proxy else: return None def activeTrans(self): return self.laborDtl.activeTrans() def posted(self): return self.laborDtl.posted() def jobType(self): return self.laborDtl.jobType() def startStamp(self): return self.laborDtl.startStamp() def endStamp(self): return self.laborDtl.endStamp() def qtyComplete(self): return self.laborDtl.qtyComplete() def qtyScrap(self): return self.laborDtl.qtyScrap() def activityPercentage(self): return self.laborDtl.activityPercentage() def scrapCode(self): return self.laborDtl.scrapCode() def prevLaborDtl(self): if self.laborDtl.prevLaborDtl(): proxy_factory = Pyro.core.getProxyForURI(self.formatPyronameString(self.namespace, ["LaborDtl"])) proxy = proxy_factory.setLaborDtlBySerialNum(self.laborDtl.prevLaborDtl().serialNum()) return proxy else: return None def labordtl_id(self): return self.laborDtl.serialNum() def operation_id(self): if self.laborDtl.operation(): return self.laborDtl.operation().serialNum() else: return None def indirect_id(self): if self.laborDtl.indirect(): return self.laborDtl.indirect().serialNum() else: return None def unitOfMeasure(self): if self.laborDtl.operation(): if self.laborDtl.operation().unitOfMeasure(): return self.laborDtl.operation().unitOfMeasure().code() else: return None else: return None def currentComplete(self): if self.laborDtl.operation(): qty_complete = self.laborDtl.operation().qtyComplete() if not qty_complete: return 0 else: return qty_complete else: return 0 def operationComplete(self): if self.laborDtl.operation(): return self.laborDtl.operation().complete() else: return 0 def jobhed_qty_complete(self): if self.laborDtl.operation(): qty_complete = self.laborDtl.operation().assembly().jobHed().qtyComplete() return qty_complete else: return 0 def jobhed_qty_required(self): if self.laborDtl.operation(): qty_required = self.laborDtl.operation().assembly().jobHed().qtyRequired() return qty_required else: return 0 ### Cleanup ### def disconnect(self): daemon = self.getDaemon() log.debug("Disconnecting labor detail proxy object %s.", self) daemon.disconnect(self)