예제 #1
0
    def do_testdata(self):
        random.seed()
        
        dropships = list(Dropship.objects.all())
        for item in Item.objects.all():
            if not random.choice([True, True, False]):
                debug('Skip %s...', item)
                continue
            debug('Creating inventory for %s...', item)
            for x in xrange(2): #@UnusedVariable
                dropship = random.choice(dropships)
                x = random.randint(0, 10)
                debug('    add %d items to %s...', x, dropship)
                for xx in xrange(x): #@UnusedVariable
                    i = Inventory(dropship=dropship,
                                  item=item,
                                  is_new=random.choice([True, False]),
                                  status=random.choice([InventoryStatus.InStock, InventoryStatus.Available, InventoryStatus.Rented]))
                    price = decimal.Decimal('%f' % random.uniform(0.3, 1))
                    if i.is_new:
                        item.retail_price_new = price
                    else:
                        item.retail_price_used = price
                    item.save()
                    i.fill_barcode()
                    i.save()

        debug('Updating rent_flag...')
        for item in Item.objects.all():
            item.rent_flag = item.available_for_selling()
            item.save()
예제 #2
0
def check_in(request, **kwargs):
    if request.method == 'POST':
        form = InventoryCheckInForm(request.POST)
        if form.is_valid():
            purchase = form.cleaned_data['purchase']
            quantity = form.cleaned_data['quantity']
            is_new = form.cleaned_data['condition'] == 'True'
            buy_only = form.cleaned_data.get('buy_only', False)
            
            for _q in range(quantity):
                inventory = Inventory()
                inventory.dropship = form.cleaned_data['dc']
                inventory.item = form.cleaned_data['upc']
                inventory.purchase_item = form.cleaned_data['purchase_item']
                inventory.buy_only = buy_only
                inventory.fill_barcode() 
                inventory.is_new = purchase.is_new if purchase else is_new
                inventory.save()

            return redirect('staff:page', 'Inventory/Check-In'), None
        item = Item.find_by_upc(form['upc'].data)
    else:
        form = InventoryCheckInForm()
        item = None
    
    return {
        'title': 'Check-In',
        'form': form,
        'item': item,
    }, None
예제 #3
0
    def do_fix_inventory_manually(self):
        from project.inventory.models import Inventory

        for l in sys.stdin.readlines():
            l = l.strip()
            if not l:  continue
            from_id, to_id = l.split()
            print '%s --> %s' % (from_id, to_id)
            item = Item.objects.get(id=to_id)
            print 'Found item: %s, %s, %s' % (item, item.category, item.upc)
            c = self._get_cursor()
            c.execute('''
            select s.id `status`, c.name `condition`, e.code, e.ref_center
                from entries e
                    left outer join entry_conditions c on c.id = e.ref_entry_condition
                    left outer join entry_statuses s on s.id = e.ref_entry_status
            where e.ref_item = %s 
            ''', [from_id])
            for status, condition, barcode, ref_center in c.fetchall():
                print status, condition, barcode, ref_center
                if Inventory.objects.filter(barcode=barcode).count():
                    continue
                o = Inventory(
                    dropship_id=DROPSHIP_MAP[ref_center],
                    item=item,
                    barcode=barcode,
                    is_new=condition == 'New',
                    status = INVENTORY_STATUS_MAP[status],
                ) 
                o.save()
                print o
예제 #4
0
    def import_inventory(self):
        statuses = {
            1: InventoryStatus.InStock, # Available
            2: InventoryStatus.Rented, # Rented
            3: InventoryStatus.Sold, # Sold
            4: InventoryStatus.Damaged, # Damaged
            5: InventoryStatus.Pending, # Invoiced
            6: InventoryStatus.Lost, # Lost
            7: InventoryStatus.Sale, # Left to canceled member
        }
        
        self.entries = {}

        c = self.mconn.cursor()
        c.execute('''
        select i.upc, i.id item_id, s.id `status`, c.name `condition`, e.code, e.ref_center, e.id
            from entries e 
                inner join items i on i.id = e.ref_item
                left outer join entry_statuses s on s.id = e.ref_entry_status
                left outer join join entry_conditions c on c.id = e.ref_entry_condition
        ''')
        for upc, id, status, condition, barcode, ref_center, _entry_id in c.fetchall():
            item = self.get_item(upc)
            if not item: 
                self.missing_items.add(id)
                continue 
            o = Inventory(
                dropship_id=self.DROPSHIP_MAP[ref_center],
                item=item,
                barcode=barcode,
                is_new=condition == 'New',
                status = statuses[status],
            ) 
            o.save()
            self.entries[barcode] = o
        print 'Found: %s' % Inventory.objects.all().count()
예제 #5
0
def entries(request, dc_code, item_id):
    if dc_code == 'GMS':
        dc = None
    else:
        dc = get_object_or_404(Dropship, code=dc_code)
    item = get_object_or_404(Item, id=item_id)

    inventories = Inventory.objects.filter(item=item).order_by('status', 'barcode')
    if dc:
        inventories = inventories.filter(dropship=dc) 

    can_unreconcile = request.user.is_superuser or request.user.get_profile().group in [Group.DC_Manager] 

    if 'print' in request.REQUEST:
        ids = request.REQUEST['print'].split(',')
        if ids and ids[0] != '':
            ids = map(strip, ids)
            inventories = inventories.filter(id__in=map(int, ids))
        return print_tyveks(request, inventories)
    elif 'unreconcile' in request.REQUEST and can_unreconcile:
        inventory = Inventory.find_by_barcode(request.REQUEST['unreconcile'])
        if inventory:
            inventory.mark_as_unreconciled() 
    elif request.method == 'POST':
        if not dc:
            dc = get_object_or_404(Dropship, code=request.POST.get('dc', ''))

        for inventory in inventories:
            if inventory.status == InventoryStatus.Available:
                if request.POST.get('checked_inventory_%d' % inventory.id, False):
                    if inventory.dropship:
                        inventory.status = InventoryStatus.InStock
                    else:
                        inventory.dropship = dc
                        inventory.fill_barcode()
                    inventory.save()
        return JsonResponse({'success': True}) 

    ctx = {
        'dc_code': dc_code,
        'dcs': Dropship.objects.all(),
        'item': item,
        'inventories': inventories,
        'can_unreconcile': can_unreconcile, 
    }
    return render_to_response('staff/inventory/entries.html', ctx, context_instance=RequestContext(request))
예제 #6
0
def order_details_item(request, order_id, item_id):
    order = get_object_or_404(TradeOrder, id=order_id)
    item = get_object_or_404(TradeOrderItem, order__id=order_id, id=item_id)

    if request.method=='POST':
        form = TradeGameForm(request.POST, instance=item)
        if form.is_valid():
            item = form.save()
            item.original_item = item.item
            if item.is_match:
                if item.is_damaged and not item.is_refurblished:
                    item.declined = True
            else:
                if request.POST.get('is_accepted') == 'True':
                    accepted_item = get_object_or_404(Item, id=request.POST.get('accepted_id'))
                    item.item = accepted_item
                    item.hot_trade = False
                    if item.is_complete:
                        item.price = accepted_item.trade_price
                    else:
                        item.price = accepted_item.trade_price_incomplete
                else:
                    item.declined = True
            item.processed = True
            item.processed_date = datetime.now()
            item.processed_by = request.user

            for c in item.claims().filter(type=ClaimType.GamemineNotReceiveTradeGame):
                c.status = CaseStatus.AutoClosed
                c.save()

            if not item.declined:
                inventory = Inventory()
                inventory.item = item.item
                inventory.is_new = False
#                inventory.buy_only = request.POST.get('is_desctination') == 'buy';
                inventory.save()
                item.inventory = inventory

            item.save()

            amount = item.price + item.get_shipping_reimbursements()

            profile = order.user.get_profile()

            if order.items.filter(processed=False).count() == 0:
                hot_trades = 0
                for i in order.items.filter(declined=False, hot_trade=True):
                    if i.item == i.original_item:
                        hot_trades += 1
                if hot_trades >= 3:
                    debug('Add bonus')
                    profile.store_credits += order.bonus or 0
                    profile.bonus_store_credits += order.bonus or 0

            if not item.declined:
                profile.store_credits += amount
                profile.bonus_store_credits += item.get_shipping_reimbursements()

                description = 'Trade game. Order#: %s. UPC: %s' % (order.order_no(), item.item.upc)
                BillingHistory.log(order.user, '', description, credit=amount, reason='trade',
                                   status=TransactionStatus.Passed, type=TransactionType.TradePayment)

            profile.save()

            if item.order.is_processed():
                item.order.send_order_processed()

            transaction.commit()
            return redirect('staff:trade_order_details', order_id)
    else:
        form = TradeGameForm(instance=item)

    transaction.rollback()
    return {
        'title': 'TRADE ORDER ID: %s' % order.order_no(),
        'order': order,
        'item': item,
        'form': form,
        'page_class': 'staff-trade-order-details',
    }