def update(self, instance, validated_data):
     rows_data = validated_data.pop('rows')
     party = Party.objects.get(pk=instance.id)
     for row_data in rows_data:
         data = dict(row_data)
         row_id = data.get('id',0)
         if not row_id:
             amount = data.get('amount',0.0)
             date = data.get('date',0.0)
             voucher_no = data.get('voucher_no',1)
             row = PartyPayment(amount=amount, date=date, party=party, voucher_no=voucher_no)
             row.save()
             set_ledger_transactions(row, row.date, ['dr', party.account, row.amount])
             set_ledger_transactions(row, row.date,
                                     ['cr', Account.objects.get_or_create(name="Cash")[0],
                                      row.amount])
     return party
    def update(self, instance, validated_data):
        rows_data = validated_data.pop('rows')
        vendor = Vendor.objects.get(pk=instance.id)
        for row_data in rows_data:
            data = dict(row_data)
            row_id = data.get('id',0)
            if not row_id:
                amount = data.get('amount',0.0)
                date = data.get('date',0.0)
                voucher_no = data.get('voucher_no',1)
                bank = data.get('bank')
                row = VendorPayments(amount=amount, date=date, vendor=vendor, voucher_no=voucher_no, bank=bank)
                row.save()
                if vendor.account:
                    set_ledger_transactions(row, row.date, ['cr', vendor.account, row.amount])
                    set_ledger_transactions(row, row.date, ['dr', row.bank.account, row.amount])

        return vendor
 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')
        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
    def update(self, instance, validated_data):
        rows_data = validated_data.pop('rows')
        bank = Bank.objects.get(pk=instance.id)
        for row_data in rows_data:
            data = dict(row_data)
            row_id = data.get('id',0)
            if not row_id:
                amount = data.get('amount',0.0)
                date = data.get('date',0.0)
                voucher_no = data.get('voucher_no',1)
                is_deposit = data.get('is_deposit',False)
                row = BankWithdrawAndDeposit(amount=amount, date=date, bank=bank, voucher_no=voucher_no,
                                             is_deposit=is_deposit)
                row.save()
                if bank.account:
                    if row.is_deposit:
                        set_ledger_transactions(row, row.date, ['cr',Account.objects.get_or_create(name='Cash')[0], row.amount])
                        set_ledger_transactions(row, row.date, ['dr', bank.account, row.amount])
                    else:
                        set_ledger_transactions(row, row.date, ['cr', bank.account, row.amount])
                        set_ledger_transactions(row, row.date, ['dr', Account.objects.get_or_create(name='Cash')[0], row.amount])

        return bank