def create(self, validated_data):
     rows_data = validated_data.pop('rows')
     sales = Sales.objects.create(**validated_data)
     for row_data in rows_data:
         data = dict(row_data)
         row = SalesRow()
         row.sn = data.get('sn')
         row.item = data.get('item')
         row.unit = data.get('unit','Pieces')
         row.quantity = data.get('quantity',0.0)
         row.is_vatable = data.get('is_vatable',True)
         row.rate = data.get('rate', 0.0)
         row.discount = data.get('discount',0.0)
         row.sales = sales
         row.save()
         iv_account, status = InventoryAccount.objects.get_or_create(
             name=row.item.name, site_id=DEFAULT_PROJECT_ID, account_no=row.item.account.account_no)
         set_transactions(row, row.sales.date, ['cr', iv_account, row.quantity])
         if not row.is_vatable:
             row_amount = row.quantity*row.rate-row.discount
         else:
             row_amount = row.quantity*row.rate*1.13-row.discount
         set_ledger_transactions(row, row.sales.date,
                                 ['cr', row.item.ledger,
                                  row_amount])
         if sales.credit:
             set_ledger_transactions(row, row.sales.date, ['dr', sales.party.account,
                                                              row_amount])
         else:
             set_ledger_transactions(row, row.sales.date, ['dr', Account.objects.get_or_create(name='Cash')[0],
                                                              row_amount])
     return sales
    def update(self, instance, validated_data):
        rows_data = validated_data.pop('rows')
        demand = Demand.objects.get(pk=instance.id)
        demand.date = validated_data.pop('date',None)
        demand.purpose = validated_data.pop('purpose','')
        demand.site = validated_data.pop('site')
        demand.save()
        for row_data in rows_data:
            data = dict(row_data)
            id = data.get('id', '')
            if id:
                row = DemandRow.objects.get(pk=id)
            else:
                row = DemandRow()

            row.item = data.get('item')
            row.unit = data.get('unit', 'Pieces')
            row.purpose = data.get('purpose', '')
            row.status = data.get('status', False)
            row.quantity = data.get('quantity', 0.0)
            row.fulfilled_quantity = data.get('fulfilled_quantity', 0)
            row.demand = demand
            row.save()
            if row.fulfilled_quantity:
                set_transactions(row, row.demand.date, ['dr', InventoryAccount.objects.get_or_create(
                    site=row.demand.site, name=row.item.name, account_no=row.item.account.account_no)[0],
                                                        row.fulfilled_quantity])
                set_transactions(row, row.demand.date, ['cr', row.item.account, row.fulfilled_quantity])
        return demand
示例#3
0
文件: views.py 项目: ratna1234/nerp
def save_entry_report(request):
    params = json.loads(request.body)
    dct = {'rows': {}}
    if params.get('type') == 'handover':
        source = Handover.objects.get(id=params.get('source_id'))
    else:
        source = PurchaseOrder.objects.get(id=params.get('source_id'))
    object_values = {
        'entry_report_no': empty_to_none(params.get('entry_report_no')),
        'fiscal_year': request.setting.fiscal_year,
        'source': source
    }
    if params.get('id'):
        obj = EntryReport.objects.get(id=params.get('id'))
    else:
        obj = EntryReport()
    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 = EntryReportRow
    for index, row in enumerate(params.get('table_view').get('rows')):
        if invalid(row, ['quantity', 'unit', 'item_id', 'rate']):
            continue
        if row.get('other_expenses') == '':
            other_expenses = 0
        else:
            other_expenses = row.get('other_expenses')
        values = {
            'sn': index + 1,
            'item_id': row.get('item_id'),
            'specification': row.get('specification'),
            'quantity': row.get('quantity'),
            'unit': row.get('unit'),
            'rate': row.get('rate'),
            'remarks': row.get('remarks'),
            'other_expenses': other_expenses,
            'entry_report': obj
        }
        submodel, created = model.objects.get_or_create(id=row.get('id'),
                                                        defaults=values)
        if not created:
            submodel = save_model(submodel, values)
        dct['rows'][index] = submodel.id
        set_transactions(
            submodel,
            obj.source.date,
            ['dr', submodel.item.account, submodel.quantity],
        )
    delete_rows(params.get('table_view').get('deleted_rows'), model)
    return JsonResponse(dct)
    def update(self, instance, validated_data):
        rows_data = validated_data.pop('rows')
        sales = Sales.objects.get(pk=instance.id)
        sales.date = validated_data.pop('date',None)
        sales.credit = validated_data.pop('credit',False)
        sales.voucher_no = validated_data.pop('voucher_no')
        sales.party = validated_data.pop('party')
        sales.save()
        for row_data in rows_data:
            data = dict(row_data)
            row_id = data.get('id', '')
            if row_id:
                row = SalesRow.objects.get(pk=row_id)
                # if not row.item == data.get('item'):
                #     iv_account, status = InventoryAccount.objects.get_or_create(
                #         name=row.item.name, site_id=DEFAULT_PROJECT_ID, account_no=row.item.account.account_no)
                #     set_transactions(row, row.purchase.date, ['cr', iv_account, row.quantity])
                #     set_ledger_transactions(row, row.purchase.date, ['cr', row.item.ledger,
                #                                                      row.quantity*row.rate-row.discount])

            else:
                row = SalesRow()
            row.sn = data.get('sn')
            row.item = data.get('item')
            row.unit = data.get('unit','Pieces')
            row.quantity = data.get('quantity',0.0)
            row.is_vatable = data.get('is_vatable',True)
            row.rate = data.get('rate', 0.0)
            row.discount = data.get('discount',0.0)
            row.sales = sales
            row.save()
            iv_account, status = InventoryAccount.objects.get_or_create(
                name=row.item.name, site_id=DEFAULT_PROJECT_ID, account_no=row.item.account.account_no)
            set_transactions(row, row.sales.date, ['cr', iv_account, row.quantity])
            if not row.is_vatable:
                row_amount = row.quantity*row.rate-row.discount
            else:
                row_amount = row.quantity*row.rate*1.13-row.discount
            set_ledger_transactions(row, row.sales.date,
                                 ['cr', row.item.ledger,
                                  row_amount])
            if sales.credit:
                set_ledger_transactions(row, row.sales.date, ['dr', sales.party.account,
                                                                 row_amount])
            else:
                set_ledger_transactions(row, row.sales.date, ['dr', Account.objects.get_or_create(name='Cash')[0],
                                                                 row_amount])

        return sales
示例#5
0
文件: views.py 项目: ratna1234/nerp
def fulfill_demand(request):
    params = json.loads(request.body)
    dct = {}
    if params.get('id'):
        row = DemandRow.objects.get(id=params.get('id'))
    else:
        dct['error_message'] = 'Row needs to be saved before being fulfilled!'
        return JsonResponse(dct)
    if params['status'] == 'Requested':
        dct['error_message'] = 'Row needs to be approved before being fulfilled!'
        return JsonResponse(dct)
    set_transactions(row, row.demand.date,
                     ['cr', row.item.account, row.release_quantity],
    )
    row.status = 'Fulfilled'
    row.save()
    return JsonResponse(dct)
示例#6
0
文件: views.py 项目: ratna1234/nerp
def save_entry_report(request):
    params = json.loads(request.body)
    dct = {'rows': {}}
    if params.get('type') == 'handover':
        source = Handover.objects.get(id=params.get('source_id'))
    else:
        source = PurchaseOrder.objects.get(id=params.get('source_id'))
    object_values = {'entry_report_no': empty_to_none(params.get('entry_report_no')),
                     'fiscal_year': request.setting.fiscal_year,
                     'source': source}
    if params.get('id'):
        obj = EntryReport.objects.get(id=params.get('id'))
    else:
        obj = EntryReport()
    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 = EntryReportRow
    for index, row in enumerate(params.get('table_view').get('rows')):
        if invalid(row, ['quantity', 'unit', 'item_id', 'rate']):
            continue
        if row.get('other_expenses') == '':
            other_expenses = 0
        else:
            other_expenses = row.get('other_expenses')
        values = {'sn': index + 1, 'item_id': row.get('item_id'),
                  'specification': row.get('specification'),
                  'quantity': row.get('quantity'), 'unit': row.get('unit'), 'rate': row.get('rate'),
                  'remarks': row.get('remarks'), 'other_expenses': other_expenses,
                  'entry_report': obj}
        submodel, created = model.objects.get_or_create(id=row.get('id'), defaults=values)
        if not created:
            submodel = save_model(submodel, values)
        dct['rows'][index] = submodel.id
        set_transactions(submodel, obj.source.date,
                         ['dr', submodel.item.account, submodel.quantity],
        )
    delete_rows(params.get('table_view').get('deleted_rows'), model)
    return JsonResponse(dct)
示例#7
0
文件: views.py 项目: ratna1234/nerp
def fulfill_demand(request):
    params = json.loads(request.body)
    dct = {}
    if params.get('id'):
        row = DemandRow.objects.get(id=params.get('id'))
    else:
        dct['error_message'] = 'Row needs to be saved before being fulfilled!'
        return JsonResponse(dct)
    if params['status'] == 'Requested':
        dct['error_message'] = 'Row needs to be approved before being fulfilled!'
        return JsonResponse(dct)
    set_transactions(
        row,
        row.demand.date,
        ['cr', row.item.account, row.release_quantity],
    )
    row.status = 'Fulfilled'
    row.save()
    return JsonResponse(dct)