Exemplo n.º 1
0
    def save_model(self, request, obj, form, change):
        if obj.pk:
            obj.modified_at = get_now()
        else:
            obj.created_at = obj.modified_at = get_now()
            obj.created_by = request.user

        return super(BaseContentAdmin, self).save_model(request, obj, form, change)
def get_tracking_no_ahead():
    """真正执行的脚本"""
    print "***START assign shipping***", get_now()
    ahead_assign_shipping()
    print "***END assign shipping***", get_now()

    print "***START shipping order***", get_now()
    ahead_shipping_order()
    print "***END shipping order***", get_now()
Exemplo n.º 3
0
def manage_script(fun):
    # 通过在shell命令行增加参数, 来确定脚本是立刻执行还是定时执行
    # upervisor中默认没有参数, 所以supervisor始终为定时执行
    start_now = False
    if len(sys.argv) == 2 and sys.argv[1] == 'now':
        start_now = True

    # 脚本的执行时间, 保存在our_config中, key为方法名称
    timings = ScriptTimings.script_dict[fun.__name__]['timings']

    while True:
        # 如果不是立刻开始, 说明是需要进行循环跑的
        if not start_now:
            timing_start(timings)

        # 在方法执行之前, 进行脚本创建
        script_log = ScriptLog.objects.create(process=fun.__name__,
                                              date_from=get_now(),
                                              running_status=2)

        connection.close()

        # 执行方法, 如果发生异常, 则捕获异常, 并结束循环
        try:
            fun()
        except Exception, e:
            script_log.date_to = get_now()
            script_log.running_status = 0
            script_log.content = e
            script_log.save()
            break

        # 方法执行结束, 进行善后处理
        script_log.date_to = get_now()
        script_log.running_status = 1
        script_log.run_time = round(
            (script_log.date_to - script_log.date_from).total_seconds() / 60.0,
            2)
        script_log.save()

        connection.close()
        sys.stdout.flush()
        gc.collect()

        # 如果是要立刻开始的, 说明是手动跑的, 这次跑完, 则中断循环
        if start_now:
            break
        time.sleep(60)
Exemplo n.º 4
0
def nxb_get_data(packages):
    result = {
        'datas': [],
        'template': 'nxb.html',
        'msg': '',
    }

    for package in packages:
        packageitem = package.set_to_logistics()

        data = {
            'package_id': package.id,
            'address': package.name + '<br>'\
                       + package.address + '<br>'\
                       + package.shipping_city + ','\
                       + package.shipping_state + ','\
                       + package.shipping_country.name,
            'zip': package.shipping_zipcode,
            'phone': package.shipping_phone,
            'tracking_code': package.tracking_no,
            'country_code': package.shipping_country.code,
            'country_cn': package.shipping_country.cn_name,
            'set': packageitem.name,
            'date': get_now(),
            'customs_amount': package.custom_amount,
        }
        result['datas'].append(data)
    return result
Exemplo n.º 5
0
def get_wish_order():
    print "**START**", get_now()

    channel_accounts = get_accounts('wish')
    for account in channel_accounts:
        print "\n *Account: %s Start" % account.name

        try:
            wish = Wish(client_id=account.client_id,
                        client_secret=account.client_secret,
                        refresh_token=account.refresh_token
                        )
        except Exception, e:
            print "Failure, account: ", account.name, get_now(), e
            continue
        
        #取最近2天
        next_page = "First"
        since = (get_now() - datetime.timedelta(days=2)).isoformat()[:-6]

        while next_page:
            try:
                if next_page == "First":
                    datas = wish.list_order(since, limit=5)
                else:
                    datas = wish.list_order_by_next_page(next_page)

                next_page = datas.get('paging', {}).get('next', '')
            except Exception, e:
                print ee(e), get_now()
                break

            order_list = datas.get('data', [])
            #如果最后一页只有一个订单,数据类型会变成字典,需转换成列表
            if type(order_list) == dict:
                order_list = [order_list]

            # pp(order_list)
            order_dicts = data_to_order_dicts(order_list, account)

            for ordernum, order_dict in order_dicts.iteritems():
                r = import_order(order_dict)

                #每导入一个订单, 打印出订单信息
                print "Success" if r['success'] else 'Failure',\
                      ordernum, get_now(), account.name, r['msg'].strip()
Exemplo n.º 6
0
def data_to_order_dicts(order_list, account):
    order_dicts = {}

    for order_info in order_list:
        order = order_info['Order']
        ordernum = order['transaction_id']
        import_note = ''

        try:
            sku = order['sku']
            qty = int(order['quantity'])
            price = float(order['price'])
            order_item = {
                'sku': sku,
                'qty': qty,
                'price': price,
                'channel_oi_id': order['order_id'],
            }
        except Exception, e:
            import_note += u'| orderitem 有误 %s \n' % ee(e)

        if ordernum not in order_dicts:
            order_dict = {}
            order_dict['ordernum'] = ordernum
            order_dict['channel'] = account

            order_dict['order_items'] = [order_item]


            # 金额的计算, 使用扣除平台费之前的金额
            try:
                order_dict['currency'] = "USD"
                order_dict['rate'] = 1.0
                order_dict['amount_shipping'] = float(order['shipping']) * qty
                order_dict['amount'] = qty * price + order_dict['amount_shipping']
            except Exception, e:
                import_note += u'| 订单金额有误 %s \n' % ee(e)

            order_dict['shipping_type'] = 0
            order_dict['create_time'] = eparse(order['order_time'] + '+00:00')
            order_dict['latest_ship_date'] = get_now() + datetime.timedelta(hours=int(order['hours_to_fulfill']))

            # 地址信息
            try:
                address_info = order['ShippingDetail']

                order_dict['shipping_firstname'] = address_info['name']
                order_dict['shipping_address'] = address_info.get('street_address1', '') + u" " + \
                                                 address_info.get('street_address2', '')
                order_dict['shipping_city'] = address_info['city']
                order_dict['shipping_state'] = address_info.get('state', '')
                order_dict['shipping_country_code'] = address_info['country']
                order_dict['shipping_zipcode'] = address_info.get('zipcode', '')
                order_dict['shipping_phone'] = address_info['phone_number']
            except Exception, e:
                import_note += u'| 订单地址信息有误 %s \n' % ee(e)
Exemplo n.º 7
0
 def save(self, *args, **kwargs):
     kwargs['using'] = settings.BILLING_DB
     assigned_at = kwargs.pop("assigned_at", None)
     if not kwargs.pop("no_assigned_at_save", False):
         if assigned_at:
             self.assigned_at = assigned_at
         else:
             self.assigned_at = get_now()
     # self.update_free_reserved(save=False)
     return super(ExternalNumber, self).save(*args, **kwargs)
def ahead_assign_shipping():
    # 给速卖通的package提前跑运单号
    packages = Package.objects.filter(shipping__isnull=True)\
                              .filter(order__channel__type=2)\
                              .exclude(status=4)
    print packages
    for package in packages:
        carrier = package.get_carrier()
        if carrier:
            shipping = Shipping.objects.filter(label=carrier).first()
            if not shipping:
                print "Failure", package.id, get_now(), carrier, "not exist"
                continue
            package.shipping = shipping
            package.option_log += u'\n IT 在%s 通过 提前跑运单号 分配了物流方式%s' % (
                get_now(), shipping.label)
            package.save()
            print "Success", package.id, get_now(), shipping
        else:
            print "Failure", package.id, get_now(), "not assign carrier"
Exemplo n.º 9
0
def timing_start(times):
    while True:
        now_minute = get_now().minute
        now_hour = get_now().hour

        if now_minute == 0:
            print 'Time is %s:00' % now_hour

        if type(times) == list:
            if time.strftime('%H:%M') in times:
                print '%s START' % time.strftime('%H:%M')
                break

        elif type(times) == dict:
            if (not (now_hour + times['start_hour']) % times['interval_hour']
                ) and now_minute == times['start_minute']:
                print '%s START' % time.strftime('%H:%M')
                break
        sys.stdout.flush()

        time.sleep(45)
    return True
Exemplo n.º 10
0
def get_smt_order():
    print "**START**", get_now()

    # 获取所有速卖有效通账号
    channel_accounts = get_accounts('Smt')
    for account in channel_accounts:
        print "\n *Account: %s Start" % account.name
        # 如果帐号尝试失败, 则继续下一个帐号
        success_num = 0
        for i in range(10):
            try:
                aliexpress = Aliexpress(
                    app_key=account.app_key,
                    app_pwd=account.app_pwd,
                    refresh_token=account.refresh_token,
                )
                data = aliexpress.list_order(page=1, page_size=1)
                totalItem = data.get('totalItem') or '0'
                break
            except Exception, e:
                print ee(e)
                print "Failure %s , try numbers: %s" % (account.name, i + 1)
        else:
            print "**Failure %s" % account.name
            continue

        print "Total: ", totalItem
        # 如果没有订单, 则换帐号
        if int(totalItem) == 0:
            print account.name, "has no order."
            time.sleep(2)
            continue

        # 因为目的只是获取订单号, 所以page_size设置的较大
        page_size = 30
        order_info = []

        # pages向上取整, 使用(A+B-1)/B, range最右再加一页
        pages = int((int(totalItem) + page_size - 1) / page_size) + 1
        for i in range(1, pages):
            for k in range(3):
                try:
                    data = aliexpress.list_order(page=i, page_size=page_size)
                    break
                except Exception, e:
                    print 'Get page timeout.Numbers:%s Page:%s ' % (k, i)
            # 订单的备注信息只在这里有, 在订单的详细信息中没有, 但是有的订单会没有memo字段, 因此使用字典的get方法
            order_info += [(str(j['orderId']), j.get('memo', ''))
                           for j in data['orderList']]
            time.sleep(1)
def ahead_shipping_order():
    # 给速卖通的package提前获取运单号
    packages = Package.objects.filter(shipping__isnull=False)\
                              .filter(order__channel__type=2)\
                              .filter(tracking_no='')\
                              .exclude(status=4)\
                              .filter(shipping__label__in=ShippingList.have_api_shipping)
    for package in packages:
        # todo 测试的时候不走sfru
        # if package.shipping.label == 'SFRU':
        #     print 'SFRU continue'
        #     continue
        result = logistics_tracking_no(package)
        if result['success']:
            # todo 记录谁在什么时候分配的运单号
            package.tracking_no = result['tracking_no']
            package.option_log += u'\n IT 在%s 通过 提前跑运单号 获取了运单号%s' % (
                get_now(), result['tracking_no'])
            package.save()
            print "Success", package.id, package.shipping.label, get_now(
            ), package.tracking_no
        else:
            print "Failure", package.id, package.shipping.label, get_now(
            ), result['msg']
Exemplo n.º 12
0
def eub_distribute(package):
    result = {
        'success': False,
        'tracking_no': '',
        'msg': '',
    }
    # eub的api可能会卡主, 因此设置timeout=5执行时间, 最大尝试次数为3
    for i in range(3):
        try:
            eub = Eub(package.shipping.label)
            tracking_data = eub.order(package)
            break
        except Exception, e:
            print "EUB try numbers:%s timeout. %s %s %s" % (i + 1, package.id,
                                                            get_now(), str(e))
            tracking_data = ''
Exemplo n.º 13
0
def handle(request):
    data = {}

    if request.POST.get('type') == 'orderitem_detail':

        try:
            from_time = eparse(request.POST.get('from'), offset=" 00:00:00+08:00")
            to_time = eparse(request.POST.get('to'), offset=" 00:00:00+08:00") or get_now()
        except Exception, e:
            messages.error(request, u'请输入正确的时间格式')
            return redirect('order_handle')
        shop = request.POST.get('shop')
        channel_id = request.POST.get('channel')

        response, writer = write_csv("order_cost")
        orderitem_detail(writer, from_time, to_time, shop, channel_id)
        return response
Exemplo n.º 14
0
def check_and_add_needed_docs(user):
    "Проверяет на наличие необходимых подписанных документов. При их отсутствии - создает на них заявки"
    profile = user.get_profile()
    if not profile.is_card:
        for doc_slug in NEEDED_DOCS:
            sd = get_signed(user, doc_slug)
            if not sd:
                # если нету заявок на этот документ - создаем заявку.
                app = get_application(user, doc_slug)
                if not app:
                    doc = FinDoc.objects.get(slug=doc_slug)
                    sd = FinDocSignApplication(
                        assigned_to=user,
                        assigned_at=get_now(),
                        findoc=doc,
                    )
                    sd.save()
Exemplo n.º 15
0
def sfhome_get_data(packages):
    result = {
        'datas': [],
        'template': 'sfhome.html',
        'msg': '',
    }
    sf = Sfhome()
    for package in packages:
        packageitem = package.set_to_logistics()

        # todo 这个destcode需要使用api查询
        destcode = sf.search(package.id)["destcode"]        

        # todo 展示的tracking_no是3位字母之间一个空格
        sub_tracking_no = " ".join([package.tracking_no[i:i+3] for i in range(0, len(package.tracking_no), 3)])

        data = {
            "server_type": "标准快递",
            "destcode": destcode,
            "des_country": package.shipping_country.code,
            "des_city": package.shipping_city,
            "des_state": package.shipping_state,
            "des_address": package.address,
            "des_ship_name": package.name,
            "des_phone": package.shipping_phone,
            "tracking_no": package.tracking_no,
            "sub_tracking_no": sub_tracking_no,
            "actual_weight": 0.3,
            "billing_weight": "",
            "source_state": "广州省",
            "source_city": "广州市",
            "source_district": "白云区",
            "source_address": "石槎路穗新创意园 A402",
            "source_name": "韦胜彬",

            "source_phone": 13218887792,
            "source_code": "020",
            # todo 在html上使用过滤器
            "ship_data": get_now(),
            "ship_ordernum": str(package.id),
            "ship_good_name": packageitem.cn_name,
            "total_value": total_value,
        }
        result['datas'].append(data)
    return result
Exemplo n.º 16
0
def eub_get_data(packages):
    result = {
        'datas': [],
        'template': 'eub.html',
        'msg': '',
    }

    for package in packages:
        packageitem = package.set_to_logistics()

        if package.shipping_country.code == 'US':
            country_name = 'UNITED STATES OF AMERICA'
        else:
            result['msg'] += u' | package: ' + str(package_id) + u'不发美国之外的国家'
            result['datas'].append({})
            continue

        if package.shipping_country.code == "US":
            pick_code = Eub.get_pick_code(package.shipping_zipcode)
        else:
            pick_code = 4

        data = {
            'package_id': package.id,
            'ship_name': package.name,
            'ship_address': package.address,
            'ship_city': package.shipping_city,
            'ship_state': package.shipping_state,
            'ship_country': country_name,
            'zip': package.shipping_zipcode,
            'phone': package.shipping_phone,
            'tracking_code': package.tracking_no,
            'country_code': package.shipping_country.code,
            'set_name': packageitem.name,
            'set_cn_name': packageitem.cn_name,
            'date': get_now(),
            'qty': package.qty,
            'customs_amount': package.custom_amount,
            'pick_code': pick_code,
        }
        result['datas'].append(data)
    return result
Exemplo n.º 17
0
def nxb_distribute(package):
    result = {
        'success': False,
        'tracking_no': '',
        'msg': '',
    }

    nxb_code = NxbCode.objects.filter(is_used=0).first()
    if not nxb_code:
        result['msg'] += u'nxb的运单号已经用完'
    else:
        nxb_code.is_used = 1
        nxb_code.used_time = get_now()
        nxb_code.package_id = package.id
        nxb_code.save()

        result['success'] = True
        result['tracking_no'] = nxb_code.code

    return result
Exemplo n.º 18
0
def sfru_get_data(packages):
    result = {
        'datas': [],
        'template': 'sfru.html',
        'msg': '',
    }

    for package in packages:
        packageitem = package.set_to_logistics()

        pick_code = Sfru.get_pick_code(package.shipping_country.code)
        if not pick_code:
            result['msg'] += u' | package %s 没有拣货码' % package.id
            result['datas'].append({})
            continue


        datas = {
            'package_id': package.id,
            'ship_name': package.name,
            'ship_address': package.address,
            'ship_city': package.shipping_city,
            'ship_state': package.shipping_state,
            'zip': package.shipping_zipcode,
            'ship_country': package.shipping_country.code,
            'phone': package.shipping_phone,
            'tracking_no': package.tracking_no,
            'sf_numbers': package.sf_numbers,
            'country_code': package.shipping_country,
            'set_name': packageitem.name,
            'set_cn_name': packageitem.cn_name,
            'date': get_now(),
            'qty': package.qty,
            'customs_amount': package.custom_amount,
            'product_amount': package.price,
            'actual_weight': 0.3,
            'product_weight': round(0.3 / package.qty, 2),
            'pick_code': pick_code,
        }
        result['datas'].append(datas)
    return result
Exemplo n.º 19
0
def create_and_delete_application(request, slug, redirect_after_sign):
    "Удаляет старые заявки и создает новые"
    user = request.user
    app_list = get_real_application(user)
    for app in app_list:  # удаляем все существующие заявки для данного пользователя
        app.delete()
    doc = FinDoc.objects.get(slug=slug)
    if not request.POST:
        request.POST = request.GET
    user_can_cancel = True
    if slug in ('dop_soglashenie_izmenenie_requisites',):
        user_can_cancel = False
    sd = FinDocSignApplication(
        assigned_to=user,
        assigned_at=get_now(),
        findoc=doc,
        user_can_cancel=user_can_cancel,
        service_for_billing="application_from_a_package"
        )
    sd.pickle_params({"redirect_after_sign": redirect_after_sign})
    sd.save()
Exemplo n.º 20
0
def post_shopify_no():
    print "**START**", get_now()

    channel_accounts = get_accounts('shopify')
    for account in channel_accounts:
        print "\n *Account: %s Start" % account.name
        # 选出合适的package
        packages = Package.objects.filter(order__channel_id=account.id)\
                                  .filter(shipping_id__isnull=False)\
                                  .filter(possback_status=0)\
                                  .exclude(status__in=[0, 4])\
                                  .exclude(tracking_no='')
        for package in packages:
            data = get_package_data(package)
            shopify = Shopify(account.name, account.api_key, account.password)
            try:
                r = shopify.upload_tracking(**data).json()
            except Exception, e:
                print 'Failure', package.order.ordernum, get_now(
                ), account.name, e

            error_info = r.get('errors', {}).get('order', '')
            if r.get('fulfillment', {}).get('status', '') == 'success':
                print 'Success', package.order.ordernum, get_now(
                ), account.name
            elif 'is already fulfilled' in error_info:
                print 'Already', package.order.ordernum, get_now(
                ), account.name
            elif error_info:
                print 'Failure', package.order.ordernum, get_now(
                ), account.name, error_info
            else:
                print 'Failure', package.order.ordernum, get_now(
                ), account.name, 'need IT'

        time.sleep(5)
Exemplo n.º 21
0
            return context
        bill_acc = zakaz.bill_account
        try:
            user = User.objects.get(username=bill_acc.username)
        except Exception, exc:
            context["errors"].append("No such user")
            return context
        app_list = FinDocSignApplication.objects.filter(assigned_to=user)  # получаем все заявки
        for app in app_list:  # удаляем все существующие заявки для данного пользователя
            app.delete()
        slug = "akt_priemki_peredachi_vypoln_rabot"
        doc = FinDoc.objects.get(slug=slug)
        user_can_cancel = True
        sd = FinDocSignApplication(
            assigned_to=user,
            assigned_at=get_now(),
            findoc=doc,
            user_can_cancel=user_can_cancel,
            service_for_billing="application_from_a_package"
        )
        sd.pickle_params({"redirect_after_sign": url_after_sign})
        sd.save()

        try:
            package_obj = Package_on_connection_of_service.objects.get(url_after_sign=url_after_sign, user=user)
        except:
            slugs = ['akt_priemki_peredachi_vypoln_rabot']
            successfully_create = create_package(user,
                                                 '/account/internet/demands/activation/%s/' % zayavka_id,
                                                 reverse('my_inet'),
                                                 '',
Exemplo n.º 22
0
 def save_model(self, request, obj, form, change):
     if not obj.pk:
         obj.assigned_by = request.user
         obj.assigned_at = get_now()
     return super(FinDocSignApplicationAdmin, self).save_model(request, obj, form, change)
Exemplo n.º 23
0
    def get_order_data(self, package):
        packageitem = package.set_to_logistics()

        receiver = u'''
        <name>{package.name}</name>
        <postcode>{package.shipping_zipcode}</postcode>
        <phone>{package.shipping_phone}</phone>
        <mobile></mobile>
        <country>{package.shipping_country.code}</country>
        <province>{package.shipping_state}</province>
        <city>{package.shipping_city}</city>
        <county></county>
        <street>{package.address}</street>
        '''.format(package=package)

        item_list = u'''
        <item>
        <count>{package.qty}</count>
        <origin>CN</origin>
        <cnname>{packageitem.cn_name}</cnname>
        <unit>11</unit>
        <weight>{package.weight}</weight>
        <delcarevalue>{package.custom_amount}</delcarevalue>
        <enname>{packageitem.name}</enname>
        <description></description>
        </item>
        '''.format(package=package, packageitem=packageitem)

        package_data = {
            "account":
            self,
            "package":
            package,
            "receiver":
            receiver,
            "items":
            item_list,
            "startdate":
            get_now(utc=True).isoformat()[:-6],
            "enddate":
            (get_now(utc=True) + datetime.timedelta(days=10)).isoformat()[:-6],
        }

        data = u'''<?xml version="1.0" encoding="UTF-8"?>
        <orders xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <order>
            <orderid>{package.id:1>4}</orderid>
            <operationtype>0</operationtype>
            <producttype>0</producttype>
            <customercode>njky2015</customercode>
            <vipcode></vipcode>
            <clcttype>1</clcttype>
            <pod>false</pod>
            <untread>Abandoned</untread>
            <volweight>0</volweight>
            <startdate>{startdate}</startdate>
            <enddate>{enddate}</enddate>
            <printcode>01</printcode>
            <sender>{account.sender}</sender>
            <receiver>{receiver}</receiver>
            <collect>{account.collect}</collect>
            <items>{items}</items>
            <remark></remark>
          </order>
        </orders>'''.format(**package_data)

        # 去掉xml文件中的-'&, 并用utf8格式进行编码
        data = data.replace("'", " ").replace("&", " ").encode('utf-8')
        return data
Exemplo n.º 24
0
def do_package():
    # 创建package
    print 'START create package', get_now()
    create_package()
    print 'END create package', get_now()

    # 更新package的状态
    print 'START update_package_status_to1', get_now()
    update_package_status_to1()
    print 'END update_package_status_to1', get_now()

    # 创建itemlocked & itemwanted
    print 'START itemlocked', get_now()
    lock_packageitem()
    print 'END itemlocked', get_now()

    # 链接itemwanted & itemlocked
    print 'START mapping_item_wanted', get_now()
    mapping_item_wanted()
    print 'END mapping_item_wanted', get_now()

    # charge_package_can_pick
    print 'START charge_package_can_pick', get_now()
    charge_package_can_pick()
    print 'END charge_package_can_pick', get_now()

    # 更新order为发货完成
    print 'START orders_delivery', get_now()
    orders_delivery()
    print 'END orders_delivery', get_now()
Exemplo n.º 25
0
def get_choies_order():
    print '*START work get order %s' % get_now()
    sys.stdout.flush()

    #从choies或者wholssale导入的订单, 有5小时的时差
    add_5hour = datetime.timedelta(hours=5)

    shops = [
        'choies.com',
    ]

    urls = {
        'choies.com': 'http://www.choies.com/api/order_date_list',
        # 'wholesale': 'http://www.choieswholesale.com/api/order_date_list',
        # 'persunmall': 'http://www.persunmall.com/api/order_date_list',
        # 'choies': 'http://local.clothes.com/api/order_date_list',
    }

    posturls = {
        'choies.com': 'http://www.choies.com/api/from_ws_update_order_erp',
        # 'wholesale': 'http://www.choieswholesale.com/api/from_ws_update_order_erp',
        # 'persunmall': 'http://www.persunmall.com/api/from_ws_update_order_erp',
        # 'choies': 'http://local.clothes.com/api/from_ws_update_order_erp',
    }

    for shop_name in shops:

        today = datetime.date.today()
        start_date = today - datetime.timedelta(days=30)
        start_date = today - datetime.timedelta(days=3)  # 测试用
        while today >= start_date:
            # 根据日期获取订单信息
            start_date = start_date + datetime.timedelta(days=1)
            url = urls[shop_name] + "?date=%s" % start_date.isoformat()
            print url, shop_name
            shop = Channel.objects.get(name=shop_name)
            r = requests.get(url)
            if r.status_code == 200:
                pass
            else:
                print 'Url return %s' % str(r.status_code)
                continue

            try:
                orders_data = r.json()
            except Exception, e:
                print str(e)
                continue

            # 处理订单
            for order_data in orders_data:
                if order_data['payment_status'] != 'verify_pass':
                    continue

                order_dict = {}
                #print order_data
                try:
                    order = Order.objects.get(ordernum=order_data['ordernum'])
                except:
                    # 必填字段
                    order_dict['ordernum'] = order_data['ordernum']
                    order_dict['channel'] = shop

                    order_items = []
                    for item_data in order_data['orderitems']:
                        model = item_data['sku']
                        sku_items = []
                        size = ''
                        color = ''

                        for attribute in item_data['attributes'].strip().split(
                                ';'):
                            if not attribute:
                                continue

                            key = attribute.split(':')[0]
                            try:
                                value = attribute.split(':')[1]
                            except:
                                break

                            if key == 'Size':
                                size = value.replace(' ', "")
                                if size.startswith('EUR'):
                                    size = size.split('/')[1]
                            elif key == 'Color':
                                color = value.replace(' ', "")
                                try:
                                    other = attribute.split(':')[2]
                                    color = ""
                                except:
                                    pass

                            size = size.split('(')[0]

                            try:
                                color_other = color.split('[-]')[1]
                                color = ""
                            except:
                                pass

                        sku_items.append(model)
                        sku_items.append(size)
                        sku_items.append(color)
                        sku = '-'.join([i for i in sku_items if i])
                        sku = sku.upper()
                        if 'is_gift' in item_data and int(
                                item_data['is_gift']) == 0:
                            is_gift = False
                        else:
                            is_gift = True

                        order_item = {
                            'sku': sku,
                            'qty': item_data['quantity'],
                            'note': item_data['attributes'],
                            'price': item_data['price'],
                            # 如果是礼品, 当成正常的商品用, 只是price为0
                        }

                        order_items.append(order_item)
                    order_dict['order_items'] = order_items

                    # 订单信息
                    order_dict['email'] = order_data['email']
                    order_dict['note'] = order_data['remark']
                    order_dict['currency'] = order_data['currency']
                    order_dict['amount'] = float(order_data['amount'] or 0)
                    order_dict['amount_shipping'] = float(
                        order_data['amount_shipping'])  # to add 运费
                    if 'order_insurance' in order_data and order_data[
                            'order_insurance']:
                        order_dict['amount_shipping'] += float(
                            order_data['order_insurance'])

                    if order_data['rate'] == 0:
                        rate = 1
                    else:
                        rate = order_data['rate']
                    order_dict['rate'] = rate  # to delete order是否需要rate
                    if float(order_data['amount_shipping']) / rate < 10:
                        order_dict['shipping_type'] = 0
                    else:
                        order_dict['shipping_type'] = 1
                    if shop_name == "wholesale":
                        if 0 <= float(
                                order_data['amount_shipping']) / rate < 1:
                            order_dict['shipping_type'] = 0
                        else:
                            order_dict['shipping_type'] = 1
                    order_dict['create_time'] = eparse(
                        order_data['date_purchased'],
                        offset="+00:00") + add_5hour
                    # naive = parse_datetime(order_data['date_purchased']) + add_14hour
                    # order_dict['create_time'] = pytz.timezone("Asia/Shanghai").localize(naive, is_dst=None)

                    # 地址信息
                    order_dict['shipping_firstname'] = order_data[
                        'shipping_firstname']
                    order_dict['shipping_lastname'] = order_data[
                        'shipping_lastname']
                    order_dict['shipping_address'] = order_data[
                        'shipping_address']
                    order_dict['shipping_city'] = order_data['shipping_city']
                    order_dict['shipping_state'] = order_data['shipping_state']
                    order_dict['shipping_country_code'] = order_data[
                        'shipping_country']
                    order_dict['shipping_zipcode'] = order_data['shipping_zip']
                    order_dict['shipping_phone'] = order_data.get(
                        'shipping_phone', '')

                    # START 下面都是待定 是否需要一个other_msg的字段专门用来保存这些不是很重要且无规律, 但是可能需要看的信息

                    order_dict['comment1'] = order_data[
                        'cele_admin']  # to delete 红人单
                    if order_data['ip_address'] == '0.0.0.0':
                        order_dict['is_hand'] = True
                    else:
                        order_dict['is_hand'] = False

                    # todo payment_date是否需要, 和create是否二选一,
                    # 可以使用导单备注进行保存需要保存的信息
                    order_dict['payment_date'] = eparse(
                        order_data['payment_date'],
                        offset="+00:00") + add_5hour

                    order_dict['order_from'] = order_data[
                        'order_from']  # to delete 只有choies用, 记录after_sale和celebrate的
                    order_dict['payment'] = order_data[
                        'payment']  # to delete 付款方式, 不确定是否要保留
                    order_dict['amount_product'] = order_data[
                        'amount_products']  # to add 商品价格
                    order_dict['amount_coupon'] = order_data[
                        'amount_coupon']  # to add 优惠金额
                    order_dict['address_confirm'] = 1  # to delete 地址是否验证
                    # END 上面都是待定

                    print order_dict['ordernum'], order_dict[
                        'shipping_country_code'], order_dict['amount'], [
                            i['sku'] for i in order_dict['order_items']
                        ]

                    # todo
                    # order_dict['add_user'] = User.objects.get(username='******')
                    # order_dict['order_manager'] = User.objects.get(username='******')
                    r = import_order(order_dict)
                    print r['msg']
Exemplo n.º 26
0
    for package in packages:
        packageitem = package.set_to_logistics()

        attice_number = Chukouyi.get_attice_number(package.shipping_country.code)
        if not attice_number:
            result['msg'] += u' | package: %s 找不到对应的格口号' % package.id
            result['datas'].append({})
            continue

        data = {
            'package_id': package.id,
            'weight': 0.3,
            'amount_shipping': package.custom_amount,
            "sender": u'韦胜彬',
            # todo 在html上使用过滤器
            "sendetime": get_now(),
            "recivename": package.name,
            "reciveaddress": package.address,
            "city": package.shipping_city,
            "state": package.shipping_state,
            "country_code": package.shipping_country.code,
            "country_name": package.shipping_country.name,
            "country_cnname": package.shipping_country.cn_name,
            "zipcode": package.shipping_zipcode,
            "recivephone": package.shipping_phone,
            "tracking_code": package.tracking_no,
            "attice_number": attice_number,
            "chukouyi_flag": 'AAU',
            "ship_label": ship_type,
            "set_name": packageitem.name,
            "itemSign": package.tracking_no
Exemplo n.º 27
0
def import_ws_product(request):
    data_notice = {}
    if request.POST:

        if request.POST.get("type") == 'import_product_cost':
            msg = ''
            reader = csv.reader(
                StringIO.StringIO(request.FILES['csvFile'].read()))
            header = next(reader)
            for row in reader:
                for j in range(0, 3):
                    # row[j] = row[j].decode('gbk').encode('utf-8')#不要相信业务提供的表格
                    row[j] = row[j].strip()
                    if j == 3:
                        try:
                            row[j] = float(row[j])
                        except Exception, e:
                            row[j] = 0

                alias = Alias.objects.filter(sku=row[0]).first()
                if alias:
                    msg += "SUCCESS,%s |" % row[0]
                    if row[3] > 0:
                        DepotInLog.objects.filter(depot_id=2,
                                                  item=alias.item,
                                                  type=4).update(cost=row[3])
                        try:
                            depotitem = DepotItem.objects.get(depot_id=2,
                                                              item=alias.item)

                            depotin_cost = DepotInLog.objects.filter(
                                depot_id=2, item=alias.item, type=4).first()
                            if depotin_cost:
                                depotitem.total = depotitem.qty * float(row[3])
                                depotitem.save()

                        except depotitem.DoesNotExist:
                            pass

                else:
                    msg += "ERROR,%s,alias not exist |" % row[0]

            if msg:
                #下载表格
                response = HttpResponse(content_type='text/csv')
                response[
                    'Content-Disposition'] = 'attachment; filename="import_product_cost_errors.csv"'

                writer = csv.writer(response)
                writer.writerow(['product_sku'])
                datas = msg.split('|')
                for pd in datas:
                    writer.writerow([pd])
                return response

        if request.POST.get("type") == 'import_product_material':
            msg = ''
            reader = csv.reader(
                StringIO.StringIO(request.FILES['csvFile'].read()))
            header = next(reader)
            for row in reader:
                for j in range(0, 1):
                    # row[j] = row[j].decode('gbk').encode('utf-8')#不要相信业务提供的表格
                    row[j] = row[j].strip()
                p = Product.objects.filter(choies_sku=row[0]).update(
                    material=row[1])
                if p:
                    msg += "SUCCESS,%s |" % row[0]
                else:
                    msg += "ERROR,%s |" % row[0]

            if msg:
                #下载表格
                response = HttpResponse(content_type='text/csv')
                response[
                    'Content-Disposition'] = 'attachment; filename="import_product_material_errors.csv"'

                writer = csv.writer(response)
                writer.writerow(['product_sku'])
                datas = msg.split('|')
                for pd in datas:
                    writer.writerow([pd])
                return response

        if request.POST.get("type") == "import_used_ky_tracking_no":
            from lib.utils import get_now
            from lib.models import Shipping
            msg = ''
            reader = csv.reader(
                StringIO.StringIO(request.FILES['csvFile'].read()))
            header = next(reader)
            for ordernum, label, tracking_no in reader:
                order = Order.objects.filter(ordernum=ordernum).first()
                if not order:
                    msg += u'order:%s没找到 |' % ordernum
                    continue

                package = Package.objects.filter(order_id=order.id).first()
                if not package:
                    msg += u'order:%s没有创建packge |' % ordernum
                    continue

                shipping = Shipping.objects.filter(label=label).first()
                if not shipping:
                    msg += u'%s没有对应的shipping |' % label
                    continue

                package.shipping = shipping
                package.tracking_no = tracking_no
                package.option_log += u'\n%s在%s 导入了旧的物流信息:%s %s' % (
                    request.user.username, get_now(), label, tracking_no)
                package.save()
            if not msg:
                messages.success(request, u"导入成功")
            else:
                messages.error(request, msg)
Exemplo n.º 28
0
                    order_dict['amount_coupon'] = order_data[
                        'amount_coupon']  # to add 优惠金额
                    order_dict['address_confirm'] = 1  # to delete 地址是否验证
                    # END 上面都是待定

                    print order_dict['ordernum'], order_dict[
                        'shipping_country_code'], order_dict['amount'], [
                            i['sku'] for i in order_dict['order_items']
                        ]

                    # todo
                    # order_dict['add_user'] = User.objects.get(username='******')
                    # order_dict['order_manager'] = User.objects.get(username='******')
                    r = import_order(order_dict)
                    print r['msg']

                #update choies order erp_header_id = 2
                # posturl = posturls[shop_name]
                # postdata = {
                #     'order_id': order_data['id'],
                # }
                # try:
                #     pass  # 测试的时候不能回传
                #     # r = requests.post(posturl, data=postdata)
                # except Exception, e:
                #     print str(order_data['ordernum']) + ' update ' + str(shop_name) + ' order erp_header_id Failed!'

    print '*END work get order %s' % get_now()


get_choies_order()
Exemplo n.º 29
0
            from_time = eparse(request.POST.get('from'), offset=" 00:00:00+08:00")
            to_time = eparse(request.POST.get('to'), offset=" 00:00:00+08:00") or get_now()
        except Exception, e:
            messages.error(request, u'请输入正确的时间格式')
            return redirect('order_handle')
        shop = request.POST.get('shop')
        channel_id = request.POST.get('channel')

        response, writer = write_csv("order_cost")
        orderitem_detail(writer, from_time, to_time, shop, channel_id)
        return response

    elif request.POST.get("type") == 'order_cost':
        try:
            from_time = eparse(request.POST.get('from'), offset=" 00:00:00+08:00")
            to_time = eparse(request.POST.get('to'), offset=" 00:00:00+08:00") or get_now()
        except Exception, e:
            messages.error(request, u'请输入正确的时间格式%s' % str(e))
            return redirect('order_handle')

        shop = request.POST.get('shop')
        channel_id = request.POST.get('channel')

        response, writer = write_csv("order_cost")
        order_cost(writer, from_time, to_time, shop, channel_id)
        return response

    elif request.POST.get('type') == 'manual_import_order':
        msg = ''
        reader = csv.reader(StringIO.StringIO(request.FILES['csvFile'].read()))
        try:
Exemplo n.º 30
0
        writer.writerow([
            'Package_id',
            'Ordernum',
            'Shipping',
            'tracking_no',
            'print_time',
            'is_tonanjing',
            'is_over',
            'remark',
        ])

        try:
            from_time = eparse(request.POST.get('from'),
                               offset=" 00:00:00+08:00")
            to_time = eparse(request.POST.get('to'),
                             offset=" 00:00:00+08:00") or get_now()
        except Exception, e:
            messages.error(request, u"请输入正确的时间格式")
            return redirect('tongguan_index')

        package3baos = Package3bao.objects.filter(package__print_time__gte=from_time)\
                                          .filter(package__print_time__lte=to_time)\
                                          .filter(is_tonanjing=1)
        for p in package3baos:
            row = [
                p.package_id,
                p.package.order.ordernum,
                p.package.shipping.label,
                add8(p.package.print_time),
                p.is_tonanjing,
                p.is_over,
Exemplo n.º 31
0
def forecast(request):
    if request.method == 'POST':
        data = {}
        data['msg'] = ''
        order_status = [1,3,4,5,6]
        if 'channel' in request.POST and request.POST['channel']:
            channels = request.POST.getlist('channel')
            now = get_now()
            last_order = Order.objects.filter(deleted=False)\
                .filter(channel_id__in=channels).filter(status__in=order_status)\
                .filter(is_fba=True).order_by('-create_time')[:1].values('create_time')
            for l_o in last_order:
                now = l_o['create_time']
            date7 = 7
            sale_date7 = now - datetime.timedelta(days=date7)
            # 根据传递的渠道进行分别的生成
            for channel in channels:
                #先删除该channel下旧的数据
                channel = int(channel)
                FbaForecast.objects.filter(deleted=False).filter(channel_id=channel).filter(is_purchase=False).delete()

                # 选出某个商店最近7天的所有orderitem
                orderitems = OrderItem.objects.filter(deleted=False)\
                    .filter(order__status__in=order_status)\
                    .filter(order__channel_id=channel)\
                    .filter(order__create_time__gte=sale_date7)\
                    .filter(order__is_fba=True)\
                    .values('qty', 'sku', 'item_id')
                fore_dic = {}
                # 这个循环计算出这个channel不同时间段的销售量: 7天
                for orderitem in orderitems:
                    sku = orderitem['sku']
                    try:
                        if orderitem['item_id'] not in fore_dic:
                            fore_dic[orderitem['item_id']] = {'sales7': 0}
                        fore_dic[orderitem['item_id']]['sales7'] += orderitem['qty']
                    except:
                        data['msg'] += 'Item:%s Not Found | ' % sku

                # 这个循环生成新的预测囤货信息
                itemids = fore_dic.keys()
                itemobjs = Item.objects.filter(id__in=itemids).values('id', 'sku', 'product_id')
                for itemobj in itemobjs:
                    foredata = fore_dic[itemobj['id']]
                    # try:
                        # 可用库存,当前库存
                    try:
                        fba_stock = FbaSku.objects.get(item_id=itemobj['id'])
                        can_stock = fba_stock.fulfillable #可用库存
                        now_stock = fba_stock.total - fba_stock.unsellable #当前库存
                    except FbaSku.DoesNotExist:
                        can_stock = 0
                        now_stock = 0

                    # 区分“做货产品”和“采购产品”
                    supplier_product = SupplierProduct.objects.filter(product_id=itemobj['product_id']).order_by('order')[:1].values('id', 'supplier__type')
                    supplier_type = 0
                    for s_product in supplier_product:
                        supplier_type = s_product['supplier__type']
                    if supplier_type == 2:
                        forecast_type = '做货产品'
                        is_made = True
                    else:
                        forecast_type = '采购产品'
                        is_made = False

                    # 囤货产品类型
                    if can_stock == 0:
                        has_stock = False
                        forecast_type = '断货' + forecast_type
                    else:
                        has_stock = True
                        forecast_type = '有货' + forecast_type

                    # 7天销量
                    sales_7 = foredata['sales7']

                    # 安全库存
                    if is_made:
                        safe_stock = sales_7 * 6
                    else:
                        safe_stock = sales_7 * 4

                    # 采购中的数量
                    purchase_item_qty = 0
                    qty = PurchaseOrderItem.objects.filter(status__in=[0, 3]).filter(item_id=itemobj['id']).filter(purchaseorder__status__in=[0,1]).aggregate(Sum('qty'))
                    real_qty = PurchaseOrderItem.objects.filter(status=3).filter(item_id=itemobj['id']).filter(purchaseorder__status__in=[0,1]).aggregate(Sum('real_qty'))
                    if real_qty['real_qty__sum']:
                        partial_real_qty = real_qty['real_qty__sum']
                    else:
                        partial_real_qty = 0

                    if qty['qty__sum']:
                        purchase_item_qty = qty['qty__sum'] - partial_real_qty
                    else:
                        purchase_item_qty = 0 - partial_real_qty
                    
                    #预测囤货数量(建议采购数量)
                    if not has_stock and not is_made: # 断货采购产品
                        fore_qty = sales_7 * 4 - purchase_item_qty
                    elif not has_stock and is_made: # 断货做货产品
                        fore_qty = sales_7 * 6 - purchase_item_qty
                    elif has_stock and not is_made: # 有货采购产品
                        fore_qty = sales_7 * 4 - purchase_item_qty
                    elif has_stock and not is_made: # 有货做货产品
                        fore_qty = sales_7 * 6 - purchase_item_qty

                    # 创建预测囤货数据
                    forecast = FbaForecast()
                    forecast.channel_id = channel
                    forecast.item_id = itemobj['id']
                    forecast.forecast_type = forecast_type
                    forecast.sales_7 = sales_7
                    forecast.can_stock = can_stock
                    forecast.now_stock = now_stock
                    forecast.safe_stock = safe_stock
                    forecast.purchase_item_qty = purchase_item_qty
                    forecast.fore_qty = fore_qty
                    forecast.assigner_id = request.user.id
                    forecast.save()

                    # except Exception, e:
                    #     data['msg'] += str(e) + ' | '
            # 新增产品
            if 'skus' in request.POST and request.POST['skus']:
                skus = request.POST['skus'].strip().split('\r\n')
                do_skus = []
                for sku in skus:
                    try:
                        fba_sku = FbaSku.objects.get(sku=sku)
                        data['msg'] += '%s在对照表中已存在' % sku
                    except FbaSku.DoesNotExist:
                        do_skus.append(sku)
                if len(do_skus) > 0:
                    last_order = OrderItem.objects.filter(sku__in=do_skus).filter(order__channel_id__in=channels).filter(order__is_fba=False).order_by('-create_time')[:1].get()
                    now = last_order.order.create_time
                    date7 = 7
                    sale_date7 = now - datetime.timedelta(days=date7)
                    # 根据传递的渠道进行分别的生成
                    for channel in channels:
                        channel = int(channel)
                        # 选出某个商店最近7天的所有orderitem
                        orderitems = OrderItem.objects.filter(status=True)\
                            .exclude(order__status=6)\
                            .filter(sku__in=do_skus)\
                            .filter(order__channel_id=channel)\
                            .filter(order__created__gte=sale_date7)\
                            .filter(order__is_fba=False)\
                            .values('order__created', 'qty', 'sku')
                        fore_dic = {}
                        # 这个循环计算出这个channel不同时间段的销售量: 7天
                        sku_lists = tuple(orderitems.values_list('sku', flat=True))
                        sku_id_dict = dict(Item.objects.filter(sku__in=sku_lists).values_list('sku', 'id'))
                        for orderitem in orderitems:
                            sku = orderitem['sku']
                            try:
                                item_id = sku_id_dict[sku]
                                if item_id not in fore_dic:
                                    fore_dic[item_id] = {'sales7': 0}
                                fore_dic[item_id]['sales7'] += orderitem['qty']
                            except:
                                data['msg'] += 'Item:%s Not Found | ' % sku

                        # 这个循环生成新的预测囤货信息
                        itemids = fore_dic.keys()
                        itemobjs = Item.objects.filter(id__in=itemids).values('id', 'sku', 'product_id')
                        for itemobj in itemobjs:
                            foredata = fore_dic[itemobj['id']]
                            try:
                                # 可用库存,当前库存
                                try:
                                    fba_stock = FbaSku.objects.get(item_id=itemobj['id'])
                                    can_stock = fba_stock.fulfillable #可用库存
                                    now_stock = fba_stock.total - fba_stock.unsellable #当前库存
                                except FbaSku.DoesNotExist:
                                    can_stock = 0
                                    now_stock = 0

                                # 区分“做货产品”和“采购产品”
                                supplier_product = SupplierProduct.objects.filter(product_id=itemobj['product_id']).order_by('order').values['supplier__type'][:1].get()
                                if supplier_product['supplier__type'] == 2:
                                    forecast_title = '新增做货产品'
                                    is_made = True
                                else:
                                    forecast_title = '新增采购产品'
                                    is_made = False

                                # 7天销量
                                sales_7 = foredata['sales7']

                                # 安全库存
                                if is_made:
                                    safe_stock = sales_7 * 7
                                else:
                                    safe_stock = sales_7 * 5

                                # 采购中的数量
                                purchase_item_qty = Item.objects.get(id=itemobj['id']).get_purchasing_qty()
                                
                                #预测囤货数量(建议采购数量)
                                if not is_made: # 断货采购产品
                                    fore_qty = sales_7 * 5
                                else: # 断货做货产品
                                    fore_qty = sales_7 * 7
                                # 创建预测囤货数据
                                forecast = FbaForecast()
                                forecast.channel_id = channel
                                forecast.item_id = itemobj['id']
                                forecast.forecast_type = forecast_type
                                forecast.sales_7 = sales_7
                                forecast.can_stock = can_stock
                                forecast.now_stock = now_stock
                                forecast.safe_stock = safe_stock
                                forecast.purchase_item_qty = purchase_item_qty
                                forecast.fore_qty = fore_qty
                                forecast.assigner_id = request.user.id
                                forecast.save()

                            except Exception, e:
                                data['msg'] += str(e) + ' | '
            response = 'SUCCESS! <a href="/fba/forecast">进入预测囤货列表页面</a><br>'
            if data['msg'] != '':
                response = '报错信息:<br>%s' % (data['msg'])
            return HttpResponse(response)
Exemplo n.º 32
0
def get_amazon_order():
    print '***START work get amazon order %s ***' % get_now()

    channel_accounts = get_accounts('amazon')

    for account in channel_accounts:
        print "\n *Account: %s Start %s" % (account.name, get_now())
        #去除这个用户所在大洲的开发人员账号信息
        developer = Accounts.developers[account.continent.title()]
        amazon = Orders(access_key=developer['access_key'], 
                        secret_key=developer['secret_key'], 
                        account_id=account.account_id,
                        auth_token=account.auth_token,
                        )
        #尝试, 当无法获取的时候, 进行
        for i in range(10):
            if amazon.get_service_status().parsed.get('Status') == 'GREEN':
                print "GREEN"
                break
            else:
                print "Failure number: %s" % i+1
                time.sleep(60)
        else:
            time.sleep(1)
            print "Account:%s Failure" % account.name
            continue

        # # test start
        # #商品数量为0, 两件产品, 单件有运费,对多件有优惠
        # ordernums = ['113-6935756-6939409','115-5224300-1466659', '107-8893319-1637852', '111-5685070-5646636']
        # order_info = amazon.get_order(ordernums).parsed
        # next_token = order_info.get('NextToken', '')
        # order_list = order_info.get('Orders').get('Order')
        # print 33333
        # break
        # # test end

        # 给next_token赋初值
        next_token = 'First'
        now_days = (datetime.datetime.now()- datetime.timedelta(days=1)).strftime('%Y-%m-%d') 
        while next_token:
            #每个帐号第一次获取order, 后面使用next_token进行订单信息的获取
            if next_token == 'First':
                order_info = amazon.list_orders(marketplaceids=account.marketplaceids.split('#'),
                                                lastupdatedafter=now_days, 
                                                max_results="50", 
                                                orderstatus=('Unshipped','PartiallyShipped'),
                                                fulfillment_channels=('MFN',)
                                                ).parsed
            else:
                order_info = amazon.list_orders_by_next_token(token=next_token).parsed            
            next_token = order_info.get('NextToken', '')

            try:
                order_list = order_info.get('Orders').get('Order')
            except Exception, e:
                print e
                break
            #获取订单的时候, 如果最后一页只剩下一个订单, 那么那个订单的数据结构会是dict而不是list, 转化一下
            if type(order_list) == dict:
                order_list = [order_list]

            for order_info in order_list:
                ordernum = order_info.get('AmazonOrderId', '')
                try:
                    order = Order.objects.get(ordernum=ordernum)
                    continue
                except Exception, e:
                    pass

                order_dict = get_amazon_order_dict(order_info, account, amazon)
                r = import_order(order_dict)

                #每导入一个订单, 打印出订单信息
                print "Success" if r['success'] else 'Failure',\
                      ordernum, get_now(), account.name, r['msg'].strip()

            connection.close()
            time.sleep(60)
Exemplo n.º 33
0
                try:
                    order = Order.objects.get(ordernum=ordernum)
                    continue
                except Exception, e:
                    pass

                order_dict = get_amazon_order_dict(order_info, account, amazon)
                r = import_order(order_dict)

                #每导入一个订单, 打印出订单信息
                print "Success" if r['success'] else 'Failure',\
                      ordernum, get_now(), account.name, r['msg'].strip()

            connection.close()
            time.sleep(60)
        print "\n *Account: %s End %s" % (account.name, get_now())
        #一个帐号结束
        time.sleep(2)

    print '***END work get order %s' % get_now()

def get_amazon_fba_order():
    print '***START work get amazon fba order %s ***' % get_now()

    channel_accounts = get_accounts('amazon')

    for account in channel_accounts:
        print "\n *Account: %s Start %s" % (account.name, get_now())
        #去除这个用户所在大洲的开发人员账号信息
        developer = Accounts.developers[account.continent.title()]
        amazon = Orders(access_key=developer['access_key'], 
Exemplo n.º 34
0
            order_dict['shipping_phone'] = phone_number + "|" + mobile_no
        except Exception, e:
            order_dict['shipping_phone'] = '|'
            pass
        # 没有电话信息
        if order_dict['shipping_phone'] == '|':
            import_note += u'| 该订单没有电话信息 \n'

        # 订单的创建时间, 取付款成功时间
        # 原格式是gmtCreate: 20160512102509000-0700, 需要去除时区前的三个0, 否则无法解析
        try:
            gmtPaySuccess = order_data.get('gmtPaySuccess')
            useful = gmtPaySuccess[:14] + gmtPaySuccess[17:]
            create_time = eparse(useful)
        except Exception, e:
            create_time = get_now()
            import_note += u'| 该订单时间有误, 请联系IT \n'
        order_dict['create_time'] = create_time

        # 其他订单规则
        # 如果订单的金额大于100美金, 则该订单为大额订单, 增加文字说明
        if order_dict['amount'] > 100:
            import_note += u'| 该订单金额超过100美金的大单 \n'
        # 如果订单支付了运费, 增加文字说明
        if order_dict['amount_shipping'] > 0:
            import_note += u'| 该订单支付了运费 %s 美金 \n' % order_dict[
                'amount_shipping']

    except Exception, e:
        import_note += u'| 单身信息出错, 请联系IT %s \n' % ee(e)
Exemplo n.º 35
0
        packages = Package.objects.filter(order__channel_id=account.id)\
                                  .filter(shipping_id__isnull=False)\
                                  .filter(possback_status=0)\
                                  .exclude(status__in=[0, 4])\
                                  .exclude(tracking_no='')
        for package in packages:
            data = get_package_data(package)
            shopify = Shopify(account.name, account.api_key, account.password)
            try:
                r = shopify.upload_tracking(**data).json()
            except Exception, e:
                print 'Failure', package.order.ordernum, get_now(
                ), account.name, e

            error_info = r.get('errors', {}).get('order', '')
            if r.get('fulfillment', {}).get('status', '') == 'success':
                print 'Success', package.order.ordernum, get_now(
                ), account.name
            elif 'is already fulfilled' in error_info:
                print 'Already', package.order.ordernum, get_now(
                ), account.name
            elif error_info:
                print 'Failure', package.order.ordernum, get_now(
                ), account.name, error_info
            else:
                print 'Failure', package.order.ordernum, get_now(
                ), account.name, 'need IT'

        time.sleep(5)
    print "**END**", get_now()