2015-05-24 2 views
2

Я пытаюсь создать схему для своего приложения. Мое заявление касается управления арендой недвижимости (дома/квартиры).Схема расчета счетов-фактур и платежей в месяц

Большая путаница, с которой я столкнулся сейчас, заключается в том, как реализовать ежемесячные платежи и вести учет этих платежей для последующих отчетов. Кроме того, эти платежи должны быть интегрированы со счетами-фактурами. Это слишком запутанно, и в разделе базы данных я не очень эксперт.

Существует много способов помочь в кодировании в Интернете, но на самом деле создать схему Я не уверен, как можно научиться делать такие сложные схемы.

У меня есть большинство таблиц. Плюс создал платежи таблица, где есть

paymentID, 
TenantID, 
TotalDues, 
PaymentRecieved, //Amount Recieved for the current month dues 
PaymentRemaining, //If not fully paid the dues and still remaining.. 
DateRecieved, 
etc etc.. 

Это просто простая таблица, но я действительно путают, как сделать его более гибким, так что, если арендатор не платит арендную плату на весь этот месяц, то должны получить полную арендную плату в следующем месяце. Или если арендная плата была выплачена в этом месяце половину или некоторое количество, то она должна отслеживать ее в течение следующего месяца.

Что делать, чтобы сделать эту систему более гибкой и внедрить систему счетов?


UPDATE:

Из некоторых ответов я собранными мне нужно создать еще одну таблицу, чтобы сохранить запись.

Таким образом, мы имели бы:

payment_record/Invoice 
------------------------------ 
RecordID | Payment(Month/Year) | Electricity | Gas | Water | Rent | Total 
    1   Jan-2015   50   30  5  80 165 

Второй стол мы бы

Payment/Transaction 
------------------------------ 
PaymentID | RecordID(Foreign-Key) | PaymentReceived | DateReceived 
    1    1      100   2015-01-08 

так третья таблица будет

PaymentDue/Status 
    ---------------------------------- 
    StatusID | PaymentID(Foreign-Key) | PaymentRemaining 
     1    1       65 

Есть ли что-то мне не хватает, или я есть что нужно для начала кодирования?

Тем не менее я не уверен в еще одной вещи. Что бы я сделал, если арендатор платит за текущий месяц некоторую сумму, и через два дня он платит больше за текущий месяц. Как мне это сделать?

Нужно ли сделать еще одну запись в таблице paymentdue и payment/transaction?

+0

Первый совет: вы можете удалить 'PaymentRemaining', так как это может быть получено из требуемой оплаты минус' payments.PaymentRecieved'. – halfer

+0

Чтобы отслеживать то, что должно было, возможно, вы могли бы добавить таблицу 'payment_due'? Если арендная плата взимается каждый месяц, создайте здесь запись для причитающейся суммы. Вероятно, вам понадобится ежедневная система таймера, чтобы добавить какие-либо записи для арендаторов. Чтобы выработать общую сумму, вы можете выполнить 'SUM (payment.due)', фильтруя соответствующий арендатор. – halfer

+0

(Исправлено написание 'DateRecieved' ->' DateReceived'). – halfer

ответ

2

Вам необходимо решить проблему, просмотрев схему и инструкцию запроса, которую вы собираетесь использовать одновременно.

Из вашего образца я понимаю, что вы хотите иметь таблицу, которая отслеживает все, что полностью выполнимо. Однако для обновления этого таблицы потребуется сложная инструкция insert или хранимые процедуры.

Для простоты попробуйте разделить его на 2 стола. Это должно устранить необходимость ретроактивного обновления предыдущих записей. Он также сохранит все запросы к статусу арендатора намного быстрее из-за разделения.Первый просто содержит статические записи платежей:

paymentID,TenantID,PaymentRecieved,DateRecieved,..... 

Другой содержит статус арендатора

TenantID,PaymentRemaining,LatestPaymentID(or date),... 

Каждый раз, когда арендатор платит арендную плату, вставить 1 статическую запись и обновлять таблицу состояния соответственно. Просто версия обновления SQL для таблицы состояния может выглядеть следующим образом. Убедитесь, что вы добавляете проверки, такие вещи, как PaymentRemaining - $ оплаты, а не позволяя ему переходит в отрицательную (? Или, может быть, пусть он идет в минус, так арендатор платить меньше в следующем месяце)

INSERT INTO status VALUES ($tenantId,$monthlyRent-$payment,$paymentID) ON DUPLICATE KEY 
    UPDATE PaymentRemaining = PaymentRemaining - $payment, LatestPaymentID = $paymentID; 

Для вашего ежемесячного чека оплаты/баланса просто посмотрите на вторую таблицу.

+0

Thankyou sir, для ответа. Итак, в соответствии с этой концепцией я буду делать две записи в обеих таблицах каждый раз или просто делать запись в другой таблице, когда есть остатки баланса. –

+0

Кроме того, мне нужно сделать таблицу счетов, и если таблица счетов будет получать данные до этой таблицы? plz не против, но новый в этом разделе учета, поэтому задавайте много вопросов .. –

+1

Каждый раз, когда кто-то платит, вставьте 1 запись в первую статическую таблицу «payment_record». Цель этой таблицы - просто вести запись. Затем используйте «INSERT ... ON DUPLICATE KEY UPDATE ...» для таблицы «tenant_status» для обновления оставшегося остатка. «Tenant_status» должен иметь 1 запись на каждого арендатора и имеет самый современный баланс. –

Смежные вопросы