def create_purchase_order(request, supplier_id): """Creates a purchase order and assigns all RequestedItems to PurchaseItems that are associated with the new purchase order""" supplier = get_object_or_404(Supplier, pk=supplier_id) po = PurchaseOrder(supplier=supplier) po.save() ritem_list = supplier.get_requested_items() for ritem in ritem_list: ritem.satatus = RequestedItem.StatusEnums.STATUS_IN_ORDER sizi = ritem.size_info coli = ritem.colour_info styi = ritem.style_info cost = Decimal(0.00) sale_infos = SaleInfo.objects.filter(supplier=supplier, gallery_item=ritem.gallery_item) if sale_infos.exists(): if sale_infos.count() == 0: raise BaseException("Unable to locate matching sale information") elif sale_infos.count() == 1: si = list(sale_infos[:1])[0] cost = si.supplier_cost else: for si in sale_infos: if si.is_match(sizi, coli, styi): print "si is %s" % type(si) print "Selected this bad boy! %s: %s" % (si, si.supplier_cost) cost = si.supplier_cost break pitem = PurchaseItem(size_info=ritem.size_info, colour_info=ritem.colour_info, style_info=ritem.style_info, purchase_order=po, requested_item=ritem, sale_cost=ritem.gallery_item.unit_cost, purchase_cost=cost) pitem.save() return redirect('/admin/inventory/purchaseorder/%s' % po.id)
def view_purchase_orders_link(self, obj): """Gets the queryset of purchase orders that this club member has paid for""" link = '' if obj.purchaseorder_set.count(): info = (PurchaseOrder.get_admin_list_url(), obj.pk, 'View purchase orders') link = '<a href="%s?&purchaser__profilepicture_ptr__exact=%s">%s</a>' % info return link
def save_purchase_order(request): params = json.loads(request.body) dct = {'rows': {}} object_values = { 'order_no': empty_to_none(params.get('order_no')), 'fiscal_year': request.setting.fiscal_year, 'date': params.get('date'), 'party_id': params.get('party'), 'due_days': params.get('due_days') } if params.get('id'): obj = PurchaseOrder.objects.get(id=params.get('id')) else: obj = PurchaseOrder() try: obj = save_model(obj, object_values) except Exception as e: if hasattr(e, 'messages'): dct['error_message'] = '; '.join(e.messages) elif str(e) != '': dct['error_message'] = str(e) else: dct['error_message'] = 'Error in form data!' dct['id'] = obj.id model = PurchaseOrderRow for index, row in enumerate(params.get('table_view').get('rows')): if invalid(row, ['quantity', 'unit', 'rate', 'item_id']): continue if row.get('budget_title_no') == '': row['budget_title_no'] = None values = { 'sn': index + 1, 'item_id': row.get('item_id'), 'specification': row.get('specification'), 'rate': row.get('rate'), 'quantity': row.get('quantity'), 'unit': row.get('unit'), 'vattable': row.get('vattable'), 'budget_title_no': row.get('budget_title_no'), 'remarks': row.get('remarks'), 'purchase_order': obj } submodel, created = model.objects.get_or_create(id=row.get('id'), defaults=values) # set_transactions(submodel, request.POST.get('date'), # ['dr', bank_account, row.get('amount')], # ['cr', benefactor, row.get('amount')], # ) if not created: submodel = save_model(submodel, values) dct['rows'][index] = submodel.id delete_rows(params.get('table_view').get('deleted_rows'), model) return JsonResponse(dct)
def purchase_order(request, id=None): if id: obj = get_object_or_404(PurchaseOrder, id=id) scenario = 'Update' else: obj = PurchaseOrder(date=BSUtil().today()) scenario = 'Create' form = PurchaseOrderForm(instance=obj) object_data = PurchaseOrderSerializer(obj).data return render(request, 'purchase_order.html', { 'form': form, 'data': object_data, 'scenario': scenario })