def register_bulk_return(self, user): """ Registers bulk return with GSX """ parts = [] # Array of outbound parts in GSX format gsx_act = self.location.gsx_accounts.get(ship_to=self.ship_to) gsx_act.connect(user) for p in self.servicepart_set.all().order_by('box_number'): parts.append(p.to_gsx()) ret = gsxws.Return(shipToCode=self.ship_to) ret.notes = "" ret.width = self.width ret.length = self.length ret.height = self.height ret.carrierCode = self.carrier ret.trackingNumber = self.tracking_id ret.estimatedTotalWeight = self.weight result = ret.register_parts(parts) ret.bulkReturnOrder = parts self.dispatched_by = user self.dispatched_at = timezone.now() self.return_id = result.bulkReturnId self.tracking_url = result.trackingURL self.save() filename = "bulk_return_%s.pdf" % self.return_id self.packing_list.save(filename, File(open(result.packingList)))
def update_part(self, return_data, return_type, user): """ gsx/returns/Parts Return Update Updates the GSX status of this part """ self.repair.connect_gsx(user) p = {'partNumber': self.part_number, 'returnType': return_type} p.update(return_data) part = gsxws.RepairOrderLine(**p) ret = gsxws.Return() ret.update_parts(self.repair.confirmation, [part]) if return_type == Shipment.RETURN_DOA: self.mark_doa()
def get_return_label(self): """Get the GSX return label for this part.""" if self.return_label.name == "": # Return label not yet set, get it... label = gsxws.Return(self.return_order).get_label(self.part_number) filename = "%s_%s.pdf" % (self.return_order, self.part_number) tmp_fp = os.path.join(settings.TEMP_ROOT, filename) # move the label to local temp to avoid # django.security.SuspiciousFileOperation shutil.move(label.returnLabelFileData, tmp_fp) f = File(open(tmp_fp, 'r')) self.return_label = f self.save() self.return_label.save(filename, f) f.closed os.remove(tmp_fp) return self.return_label.read()