def create_nc2_shippingcharge(wh_flf): if wh_flf.fulfillment.ship_type.label == 'IFS_BEST': if ShippingCharge.objects.filter(external_id=wh_flf.tracking_number).count() == 0: # i.e. doesn't already exist chg = {} chg['shipper_id'] = inventory_api.shipper('IFS360', {})['id'] chg['account'] = 'N/A' chg['tracking_number'] = wh_flf.tracking_number chg['external_id'] = wh_flf.tracking_number chg['ship_date'] = wh_flf.ship_date chg['charge'] = wh_flf.shipping_cost chg['fulfillment_id'] = wh_flf.fulfillment.id chg['order_related'] = True chg['comment'] = '' ShippingCharge(**chg).save() flf_str = 'FLF%s' % str(wh_flf.fulfillment.id) if ShippingCharge.objects.filter(external_id=flf_str).count() == 0: # create a fulfill level shipping charge chg = {} chg['shipper_id'] = inventory_api.shipper('IFS360', {})['id'] chg['account'] = 'N/A' chg['tracking_number'] = wh_flf.tracking_number chg['external_id'] = flf_str chg['ship_date'] = wh_flf.ship_date chg['charge'] = NC2_PER_FULFILL chg['fulfillment_id'] = wh_flf.fulfillment.id chg['order_related'] = True chg['comment'] = '' ShippingCharge(**chg).save() if ShippingCharge.objects.filter(external_id=wh_flf.warehouse_pack_id).count() == 0: # create a box level shipping charge chg = {} chg['shipper_id'] = inventory_api.shipper('IFS360', {})['id'] chg['account'] = 'N/A' chg['tracking_number'] = wh_flf.tracking_number chg['external_id'] = wh_flf.warehouse_pack_id chg['ship_date'] = wh_flf.ship_date chg['charge'] = NC2_PER_BOX chg['fulfillment_id'] = wh_flf.fulfillment.id chg['order_related'] = True chg['comment'] = '' ShippingCharge(**chg).save() return
def process_ups(file_name): incoming_name = os.path.join(INCOMING_ROOT, file_name) ship_charges, errors = UPSCSVModel.import_data(data=open(incoming_name, 'rU'), skip_rows=6) shipper_id = inventory_api.shipper('UPS', {})['id'] # group the data by unique tracking numbers ship_charges = sorted(ship_charges, key=lambda x: x['tracking_number']) gpd_ship_charges = groupby(ship_charges, key=lambda x: x['tracking_number']) aggd_ship_charges = [agg_tracknum(list(v)) for k, v in gpd_ship_charges] new_recs_ctr = 0 exist_recs_ctr = 0 errors_cnt = len(errors) for rec in aggd_ship_charges: rec['shipper_id'] = shipper_id rec['external_id'] = rec['tracking_number'] rec_obj = ShippingCharge.objects \ .filter(external_id=rec['external_id']) \ .first() if rec_obj: # if warehose fulfill object already exists ... skip to next one exist_recs_ctr += 1 else: whflf_obj = WarehouseFulfill.objects \ .filter(tracking_number=rec['tracking_number']) \ .first() if whflf_obj: flf = whflf_obj.fulfillment if flf: rec['fulfillment_id'] = flf.id new_recs_ctr += 1 rec_obj = ShippingCharge(**rec) rec_obj.save() summary_msg = 'Loaded UPS file: %d new records, \ %d duplicate records, \ %d bad rows' \ % (new_recs_ctr, exist_recs_ctr, errors_cnt) return summary_msg, errors