def do_shipping_request(self, cr, uid, omni, package, context=None): """ This method calls the UPS API, sends the ShipmentConfirm Request to the API and gets the total cost of shipment and tracking number. """ package_obj = self.pool.get('stock.out.package') currency_obj = self.pool.get('res.currency') uom_obj = self.pool.get('product.uom') picking_obj = self.pool.get('stock.picking') ups_message_obj = self.pool.get('ups.message') omni_obj = self.pool.get('omniship') ups_shipper = omni_obj.get_ups_shipper(cr, uid, omni, context) payment_info_prepaid = \ ShipmentConfirm.payment_information_prepaid_type( AccountNumber=ups_shipper) payment_info = ShipmentConfirm.payment_information_type( payment_info_prepaid) (shipper, ship_to, ship_from) = self._add_addresses(cr, uid, omni, package, context) if not package.picking.carrier_id.service: raise osv.except_osv(_('Error!'),_("Delivery method has no service: %s")% package.picking.carrier_id.name) if not package.picking.carrier_id.service.service_code: raise osv.except_osv(_('Error!'),_("The Carrier %s is not a valid UPS Shipping Method")% package.picking.carrier_id.service.name) service = ShipmentConfirm.service_type( Code=package.picking.carrier_id.service.service_code) #TODO Fix weight weight = package.weight or 1.00 #TODO Review reference (packages, shipment_service) = self._add_packages(cr, uid, omni, package, weight, context) ship_confirm = ShipmentConfirm.shipment_confirm_request_type( shipper, ship_to, ship_from, service, payment_info, shipment_service, *packages, Description='None') shipment_confirm_instance = self.get_ups_api(cr, uid, omni, 'confirm', context) #Try to get transaction reference to work shipment_confirm_instance.TransactionReference = E.TransactionReference( E.CustomerContext('test') ) #End Transaction Reference try: response = shipment_confirm_instance.request( ship_confirm) if isinstance(response, tuple): request = response[0] response = response[1] except PyUPSException, error: raise osv.except_osv(('Error : '), ('%s' % error[0]))
def get_payment_info(type="prepaid", **kwargs): """Returns the payment info filled :param type: The payment type. .. note:: if payment type is prepaid AccountNumber must be provided. """ if type == 'prepaid': assert 'AccountNumber' in kwargs return ShipmentConfirm.payment_information_type( ShipmentConfirm.payment_information_prepaid_type( AccountNumber=kwargs['AccountNumber'])) else: raise Exception("Type %s is not supported" % type)
def get_payment_info(type="prepaid", **kwargs): """Returns the payment info filled :param type: The payment type. .. note:: if payment type is prepaid AccountNumber must be provided. """ if type == 'prepaid': assert 'AccountNumber' in kwargs return ShipmentConfirm.payment_information_type( ShipmentConfirm.payment_information_prepaid_type( AccountNumber=kwargs['AccountNumber']) ) else: raise Exception("Type %s is not supported" % type)
def do_shipping_request(self, cr, uid, omni, package, context=None): """ This method calls the UPS API, sends the ShipmentConfirm Request to the API and gets the total cost of shipment and tracking number. """ package_obj = self.pool.get('stock.out.package') currency_obj = self.pool.get('res.currency') uom_obj = self.pool.get('product.uom') picking_obj = self.pool.get('stock.picking') ups_message_obj = self.pool.get('ups.message') omni_obj = self.pool.get('omniship') ups_shipper = omni_obj.get_ups_shipper(cr, uid, omni, context) payment_info_prepaid = \ ShipmentConfirm.payment_information_prepaid_type( AccountNumber=ups_shipper) payment_info = ShipmentConfirm.payment_information_type( payment_info_prepaid) (shipper, ship_to, ship_from) = self._add_addresses(cr, uid, omni, package, context) if not package.picking.carrier_id.service: raise osv.except_osv( _('Error!'), _("Delivery method has no service: %s") % package.picking.carrier_id.name) if not package.picking.carrier_id.service.service_code: raise osv.except_osv( _('Error!'), _("The Carrier %s is not a valid UPS Shipping Method") % package.picking.carrier_id.service.name) service = ShipmentConfirm.service_type( Code=package.picking.carrier_id.service.service_code) #TODO Fix weight weight = package.weight or 1.00 #TODO Review reference (packages, shipment_service) = self._add_packages(cr, uid, omni, package, weight, context) ship_confirm = ShipmentConfirm.shipment_confirm_request_type( shipper, ship_to, ship_from, service, payment_info, shipment_service, *packages, Description='None') shipment_confirm_instance = self.get_ups_api(cr, uid, omni, 'confirm', context) #Try to get transaction reference to work shipment_confirm_instance.TransactionReference = E.TransactionReference( E.CustomerContext('test')) #End Transaction Reference try: response = shipment_confirm_instance.request(ship_confirm) if isinstance(response, tuple): request = response[0] response = response[1] except PyUPSException, error: raise osv.except_osv(('Error : '), ('%s' % error[0]))
def do_shipping_request(self, cursor, user, ids, context=None): """ This method calls the UPS API, sends the ShipmentConfirm Request to the API and gets the total cost of shipment and tracking number. :param cursor: Database Cursor :param user: ID of User :param context: Context directly uses active id. """ currency_obj = self.pool.get('res.currency') uom_obj = self.pool.get('product.uom') packages_obj = self.pool.get('ups.shippingregister.package') company_obj = self.pool.get('res.company') ups_shipper = company_obj.get_ups_shipper(cursor, user, context) ups_message_obj = self.pool.get('ups.message') payment_info_prepaid = \ ShipmentConfirm.payment_information_prepaid_type( AccountNumber=ups_shipper) payment_info = ShipmentConfirm.payment_information_type( payment_info_prepaid) for shipment_record in self.browse(cursor, user, ids, context): (shipper, ship_to, ship_from) = self._add_addresses(cursor, user, shipment_record.id, context) service = ShipmentConfirm.service_type( Code=shipment_record.service_type.code) (packages, shipment_service) = self._add_packages(cursor, user, shipment_record.id, context) ship_confirm = ShipmentConfirm.shipment_confirm_request_type( shipper, ship_to, ship_from, service, payment_info, shipment_service, *packages, Description=shipment_record.description or 'None') shipment_confirm_instance = self.get_ups_api( cursor, user, 'confirm', context) try: response = shipment_confirm_instance.request(ship_confirm) if isinstance(response, tuple): request = response[0] response = response[1] except PyUPSException, error: if company_obj.get_ups_save_xml(cursor, user, context): # TODO: We need a better error exception here. xml_messages = [(0, 0, { 'name': 'ConfirmShipmentRequest', 'type': 'request', 'message': error[1] }), (0, 0, { 'name': 'ConfirmShipmentResponse', 'type': 'response', 'message': etree.tostring(error[2], pretty_print=True) })] self.write(cursor, user, shipment_record.id, {'xml_messages': xml_messages}, context) raise osv.except_osv(('Error : '), ('%s' % error[0])) # Now store values in the register currency_id = currency_obj.search(cursor, user, [('symbol', '=', \ response.ShipmentCharges.TotalCharges.CurrencyCode)]) uom_id = uom_obj.search(cursor, user, [ ('name', '=', \ response.BillingWeight.UnitOfMeasurement.Code.pyval)]) before = ShipmentConfirm.extract_digest(response) if company_obj.get_ups_save_xml(cursor, user, context): xml_messages = [(0, 0, { 'name': 'ConfirmShipmentRequest', 'type': 'request', 'message': request }), (0, 0, { 'name': 'ConfirmShipmentResponse', 'type': 'response', 'message': etree.tostring(response, pretty_print=True) })] else: xml_messages = [] self.write(cursor, user, shipment_record.id, { 'name': response.ShipmentIdentificationNumber, 'billed_weight': response.BillingWeight.Weight, 'billed_weight_uom': uom_id and uom_id[0] or False, 'total_amount': response.ShipmentCharges.\ TotalCharges.MonetaryValue, 'total_amount_currency': currency_id and \ currency_id[0] or False, 'digest': ShipmentConfirm.extract_digest(response), 'xml_messages': xml_messages, 'state': 'confirmed' }, context) after = self.browse(cursor, user, shipment_record.id).digest packages_obj.write(cursor, user, [pkg.id for pkg in shipment_record.package_det], {'state': 'confirmed'}, context)
def do_shipping_request(self, cursor, user, ids, context=None): """ This method calls the UPS API, sends the ShipmentConfirm Request to the API and gets the total cost of shipment and tracking number. :param cursor: Database Cursor :param user: ID of User :param context: Context directly uses active id. """ currency_obj = self.pool.get('res.currency') uom_obj = self.pool.get('product.uom') packages_obj = self.pool.get('ups.shippingregister.package') company_obj = self.pool.get('res.company') ups_shipper = company_obj.get_ups_shipper(cursor, user, context) payment_info_prepaid = ShipmentConfirm.payment_information_prepaid_type( AccountNumber=ups_shipper) payment_info = ShipmentConfirm.payment_information_type( payment_info_prepaid) for shipment_record in self.browse(cursor, user, ids, context): (shipper, ship_to, ship_from) = self._add_addresses(cursor, user, shipment_record.id, context) service = ShipmentConfirm.service_type( Code=shipment_record.service_type.code) (packages, shipment_service) = self._add_packages(cursor, user, shipment_record.id, context) ship_confirm = ShipmentConfirm.shipment_confirm_request_type( shipper, ship_to, ship_from, service, payment_info, shipment_service, *packages, Description=shipment_record.description or 'None') shipment_confirm_instance = self.get_ups_api(cursor, user, 'confirm', context) try: response = shipment_confirm_instance.request(ship_confirm) except Exception, error: raise osv.except_osv(('Error : '), ('%s' % error)) # Now store values in the register currency_id = currency_obj.search(cursor, user, [('symbol', '=', \ response.ShipmentCharges.TotalCharges.CurrencyCode)]) uom_id = uom_obj.search(cursor, user, [ ('name', '=', \ response.BillingWeight.UnitOfMeasurement.Code.pyval)]) before = ShipmentConfirm.extract_digest(response) self.write(cursor, user, shipment_record.id, { 'name': response.ShipmentIdentificationNumber, 'billed_weight': response.BillingWeight.Weight, 'billed_weight_uom': uom_id and uom_id[0] or False, 'total_amount': response.ShipmentCharges.\ TotalCharges.MonetaryValue, 'total_amount_currency': currency_id and \ currency_id[0] or False, 'digest': ShipmentConfirm.extract_digest(response), 'state': 'confirmed' }, context) after = self.browse(cursor, user, shipment_record.id).digest packages_obj.write(cursor, user, [pkg.id for pkg in shipment_record.package_det], {'state': 'confirmed'}, context)