from Pyro.EventService.Clients import Publisher from Operation import Operation from Store import store from sndcs.Config import config class OperationFactory: def new(self, assembly=None, number=None, description=None, unit_of_measure=None, conversion_unit=None, department=None, task=None): operation = Operation() if assembly: operation.setAssembly(assembly) if number: operation.setNumber(number) if description: operation.setDescription(description) if unit_of_measure: operation.setUnitOfMeasure(unit_of_measure) if conversion_unit: operation.setConversionUnit(conversion_unit) if department: operation.setDepartment( department) if task: operation.setTasks(task) store.addObject(operation) store.saveChanges() # We have to save so that we have a serialNum to send out with the event if not assembly.jobHed().isClosed(): #Was creating new operations for closed jobs... operation.add() else: from datetime import datetime operation.setComplete(1) operation.setCompleteStamp(datetime.today()) store.saveChanges() return operation def getOperationByJobAssemblyOperation(self, job_num, assembly_num = None, operation_num = None, separator = '-'): """ Return an operation from it's job, assembly, and operation. If assembly and operation are None then job may be a job-asm-op string that will need to be parsed based on separator. If either assembly or operation remais None after parsing then the default number is used. 100-10-10 = job:100, assembly:10, operation:10 100-10 = job:100, assembly:, operation:10 (operation is a more significant value that assembly) 100 = job:100, assembly:, operation:""" # TODO: get default assembly and operation default numbers from configuration default_assembly = "0" default_operation = "0" if not assembly_num and not operation_num: tmp = job_num.split(separator, 2) if len(tmp) == 3: job_num, assembly_num, operation_num = tmp elif len(tmp) == 2: job_num, operation_num = tmp elif len(tmp) == 1: job_num, = tmp if not assembly_num: assembly_num = default_assembly if not operation_num: operation_num = default_operation from sndcs.JobHedFactory import JobHedFactory job = JobHedFactory().getJobHedByNumber(job_num) if not job: return None else: job = job[0] assembly = [x for x in job.assemblies() if x.number() == assembly_num] if not assembly: return None else: assembly = assembly[0] operation = [x for x in assembly.operations() if x.number() == operation_num] if not operation: return None else: return operation[0] def getOperationBySerialNum(self, serialNum): return store.fetchObject(Operation, serialNum) def getOperationsByAssemblySerialNum(self,assembly): return store.fetchObjectsOfClass(Operation,"WHERE assemblyObjId=%s ORDER BY number+'0',number" % assembly) def getOperationsByDepartmentSerialNum(self,department): return store.fetchObjectsOfClass(Operation,"WHERE departmentObjId=%s AND complete=0" % department)