示例#1
0
def clearance_commit(request, clearance_id):
    clearance = Clearance.get_by_id(int(clearance_id))
    if clearance is None:
        raise Http404

    logging.info('clearance=%s'%clearance)

    if clearance.lock:
        info = 'clearance is locked!'
    else:
        clearance.lock = True
        clearance.save()
        logging.info('add task for "do_clearance(%d)"' % clearance.key().id())
        taskqueue.add(url='/tasks/do_clearance/%s/'%clearance.key().id(), method='GET')
        info = 'task add ok'
    

    return render_to_response('vital/clearance_commit.html', RequestContext(request, {'clearance':clearance, 'info':info}))
示例#2
0
def clearance_create(request):
    if request.method == 'POST':
        form = ClearanceForm(request.POST)
        if form.is_valid():
            c = Clearance()
            c.date = form.cleaned_data['date']
            c.desc = form.cleaned_data['desc']
            c.save()
            return redirect('/vital/clearance/%d/edit/'%c.key().id())
    else: 
        form = ClearanceForm()

    return render_to_response('vital/clearance_create.html', RequestContext(request, {'form':form}))
示例#3
0
def task_do_clearance(request, clearance_id):
    logging.info('task do clearance - clearance_id=%s'%clearance_id)
    clearance = Clearance.get_by_id(int(clearance_id))
    if clearance is None:
        raise Http404

    logging.info('clearance = %s'%clearance)


         
    items = ClearanceItem.objects.all().ancestor(clearance)
    for i in items:
        logging.info('i=%s'%i) 
        if not (i.transaction_item is None):
            logging.info('has transaction...')
            if not i.clear:
                logging.info('but,not clear...')
                i.clear = True
                i.save()
                logging.info('cleared')
        else:
            tr = Transaction.objects.all().filter('clearance_item_key =', i.key()).get()
            if not (tr is None):
                logging.info('corresponding transaction found (%s)'%tr)
                i.transaction_item=tr
                logging.info('linked')
            else:
                logging.info('no corresponding transaction found')
                tr = Transaction(parent=i.account)
                tr.setDate()
                tr.clearance_item_key = i.key()
                if i.purpose == 'pick':
                    logging.info('pick item')
                    tr.purpose = 'payment'
                    tr.order_item_key = i.order_item.key()
                    tr.amount = -i.cost
                    tr.desc = i.desc
                elif i.purpose == 'give':
                    logging.info('give item')
                    tr.purpose = 'payment'
                    tr.amount = -i.cost
                    tr.desc = i.desc
                elif i.purpose == 'deposit':  
                    logging.info('deposit item')
                    tr.purpose = 'deposit'
                    tr.amount = i.cost
                    tr.desc = i.desc
                elif i.purpose == 'load':
                    logging.info('load item')
                    tr.purpose = 'deposit'
                    tr.amount = i.cost
                    tr.desc = i.desc
                else:
                    logging.info('unexpected purpose (%s)'%i.purpose)
                    tr = None

                logging.info('new tr=%s'%tr)
                if not (tr is None):
                    tr.save()
                    logging.info('tr save ok %s'%tr) 
                    i.transaction_item = tr
                    i.clear = True
                
            i.save()    
            logging.info('new tr=%s'%tr)
                


    logging.info('unlock clearance') 
    clearance.status = 'closed'
    clearance.lock = False
    clearance.clear = True
    clearance.save()

    return HttpResponse('ok')
示例#4
0
def clearance_edit(request, clearance_id):
    clearance = Clearance.get_by_id(int(clearance_id))
    if clearance is None:
        raise Http404


    if getConfig('CLEARANCE_ALL_ORDER_ITEMS',0):
        logging.info('showing all order items!')
        order_item_query = OrderItem.objects.all().filter('date =', clearance.date)
    else:
        order_item_query = OrderItem.objects.all().filter('date =', clearance.date).filter('clearance_item_ref =', None)

    c_pick_form = None
    c_give_form = None
    c_del_form = None
    c_clear_form = None
    c_load_form = None
    c_deposit_form = None

    pick_accounts = Account.objects.all().filter('purpose =', 'user').fetch(100)
    give_accounts = Account.objects.all().filter('purpose =', 'credit').fetch(100)

    if request.method == 'POST':
        logging.info(request.POST) 
        if request.POST['action'] == 'update':
            c_form = ClearanceForm(request.POST)
            if c_form.is_valid():
                clearance.date = c_form.cleaned_data['date']
                clearance.desc = c_form.cleaned_data['desc']
                clearance.save()
        if request.POST['action'] == 'pick_item':
            order_items = order_item_query.fetch(100)
            c_pick_form = ClearanceItemPickForm(request.POST,accounts=pick_accounts,order_items=order_items)     
            if c_pick_form.is_valid():
                logging.info('c_pick_form is valid!')
                order_item = OrderItem.get(c_pick_form.cleaned_data['order_item_id'])
                account = Account.get(c_pick_form.cleaned_data['account_id'])
                logging.info('account = %s'%account)
                logging.info('order_item = %s'%order_item)
                if order_item is None:
                    raise Http404
                if account is None:
                    raise Http404

                ci = ClearanceItem(parent=clearance)
                ci.account = account
                ci.order_item = order_item
                ci.cost = order_item.cost
                ci.desc = order_item.name
                ci.purpose='pick'
                ci.save()

                order_item.clearance_item_ref = ci.key()
                order_item.save() 

                c_pick_form = None

        if request.POST['action'] == 'give_item':
            c_give_form = ClearanceItemGiveForm(request.POST, give_accounts)
            if c_give_form.is_valid():
                logging.info('c_give_form is valid!')
                account = Account.get(c_give_form.cleaned_data['account_id'])
                logging.info('account = %s'%account)
                if account is None:
                    raise Http404

                ci = ClearanceItem(parent=clearance)
                ci.account = account
                ci.cost = int(c_give_form.cleaned_data['cost'])
                ci.purpose='give'
                ci.save()
  
                c_give_form = None

        if request.POST['action'] == 'load_item':
            c_load_form = ClearanceItemLoadForm(request.POST, give_accounts)
            if c_load_form.is_valid():
                logging.info('c_load_form is valid!')
                account = Account.get(c_load_form.cleaned_data['account_id'])
                logging.info('account = %s'%account)
                if account is None:
                    raise Http404

                ci = ClearanceItem(parent=clearance)
                ci.account = account
                ci.cost = int(c_load_form.cleaned_data['cost'])
                ci.purpose='load'
                ci.desc = c_load_form.cleaned_data['desc']
                ci.save()
  
                c_load_form = None

        if request.POST['action'] == 'deposit_item':
            c_deposit_form = ClearanceItemDepositForm(request.POST, pick_accounts)
            if c_deposit_form.is_valid():
                logging.info('c_deposit_form is valid!')
                account = Account.get(c_deposit_form.cleaned_data['account_id'])
                logging.info('account = %s'%account)
                if account is None:
                    raise Http404

                ci = ClearanceItem(parent=clearance)
                ci.account = account
                ci.cost = int(c_deposit_form.cleaned_data['cost'])
                ci.purpose='deposit'
                ci.desc = c_deposit_form.cleaned_data['desc']
                ci.save()
  
                c_deposit_form = None



        if request.POST['action'] == 'del_item':
            c_list = ClearanceItem.objects.all().ancestor(clearance).fetch(100)
            c_del_form = ClearanceItemDelForm(request.POST, items = c_list)
            if c_del_form.is_valid():
                logging.info('c_del_form is valid!')
                clearance_item = ClearanceItem.get(c_del_form.cleaned_data['item_id'])
                if clearance_item is None:
                    raise Http404
                if not (clearance_item.order_item is None):
                    logging.info('unmark %s'%clearance_item.order_item)
                    clearance_item.order_item.clearance_item_ref=None
                    clearance_item.order_item.save()
                clearance_item.delete()
                c_del_form = None

        if request.POST['action'] == 'clear_item':
            c_list = ClearanceItem.objects.all().ancestor(clearance).fetch(100)
            c_clear_form = ClearanceItemClearForm(request.POST, items = c_list)
            if c_clear_form.is_valid():
                logging.info('c_clear_form is valid!')
                clearance_item = ClearanceItem.get(c_clear_form.cleaned_data['item_id'])
                if clearance_item is None:
                    raise Http404
                c_clear_form = None
 

 
    
    c_form = ClearanceForm({'date':clearance.date, 'desc':clearance.desc})

    c_list = ClearanceItem.objects.all().ancestor(clearance).fetch(100)
    cost_pick = sum([i.cost for i in c_list if i.purpose=='pick'])
    cost_give = sum([i.cost for i in c_list if i.purpose=='give'])
    cost_load = sum([i.cost for i in c_list if i.purpose=='load'])
    cost_deposit = sum([i.cost for i in c_list if i.purpose=='deposit'])
 
    cost_diff = cost_pick - cost_give
    cost_put_diff = cost_deposit - cost_load
    logging.info('cost_pick=%d, cost_give=%d'%(cost_pick,cost_give))

    if c_pick_form is None:
        order_items = order_item_query.fetch(100)
        c_pick_form = ClearanceItemPickForm(accounts=pick_accounts,order_items=order_items)

    if c_give_form is None:
        c_give_form = ClearanceItemGiveForm(accounts=give_accounts,cost = cost_pick-cost_give)

    if c_del_form is None:
        c_del_form = ClearanceItemDelForm(items = c_list)

    if c_clear_form is None:
        c_clear_form = ClearanceItemClearForm(items = c_list)

    if c_load_form is None:
        c_load_form = ClearanceItemLoadForm(accounts=give_accounts, cost = cost_put_diff)
    
    if c_deposit_form is None:
        c_deposit_form = ClearanceItemDepositForm(accounts=pick_accounts)





    return render_to_response('vital/clearance_edit.html', RequestContext(request, 
            {'c_form':c_form, 'c_list':c_list, 'c_pick_form': c_pick_form, 'c_give_form': c_give_form, 'c_del_form':c_del_form, 
             'cost_pick':cost_pick, 'cost_give':cost_give, 'cost_diff':cost_diff, 'c_clear_form':c_clear_form,
             'c_load_form':c_load_form, 'c_deposit_form':c_deposit_form,
             'cost_load':cost_load, 'cost_deposit':cost_deposit, 'cost_put_diff':cost_put_diff,
            }))
示例#5
0
def clearance_show(request, clearance_id):
    clearance = Clearance.get_by_id(int(clearance_id))
    if clearance is None:
        raise Http404

    return render_to_response('vital/clearance_show.html', RequestContext(request, {'clearance':clearance}))