Git Product home page Git Product logo

proprio's Introduction

property-management

Build Status Dependency Status

A free as in a beer property management software to manage your tenants

Demo link

Demo link. The database is reset every once in a while. Please use login demo/demo.

Installation

pip install -r requirements.txt
python manage.py syncdb
python manage.py runserver

Custom bank file parser

To register a new bank format parser, duplicate the existing bank format parser, modifiy its methods, and add it to the list of importers specified by the PROPRIO_IMPORT_PARSERS property in django settings

Run with Docker

This app can be run using Docker.

You can pull it at oadam/proprio.

It will put its sqlite db and its uploaded files into a /data volume that you have to provide. It also expects a SECRET_KEY environment variable containing a django secret key. You can set the DEBUG variable to run django in debug mode.

You can run it on port 80 using the following 2 steps :

docker run oadam/proprio # this will crash and generate a SECRET_KEY
docker run --env SECRET_KEY='[the generated key]' -p 80:8000 -ti -v  /path/to/your/data/dir:/data oadam/proprio

proprio's People

Contributors

oadam avatar rajanski avatar vectorien avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

proprio's Issues

Implement "write a letter" feature

Manage a list of docx letter templates
Add a button in the tenant list that lets the user
-choose a letter
-unzips the doc
-replaces {{tenant_address}} or {{tenant_name}} by the relevant tenant attribute
-sends the generated docx to the user

Categorize uploaded documents

The list of uploaded files can grow quite big. How could we organize them ? I think a system of gmail-like labels would be best

General object layout to be adapted?

Hi I was just wondering, because in reality,

  • A tenant can rent more than one property
  • A property has a rent price (a rent revision in your code afaiu)

So should'nt rent_revisions be attached to properties?

Possibility to set the due day for next months rent payment

Hi I find this app super nice and am thi king about using it for our non profit artist coworking space.

One question: Is there a possibility to set abovementioned, and also calculate the actual balance based on that?
I.e. if the montly rent is 100 , we are in the first month of the rental , like 4.4.2016, and one payment of 100 has been made. Then the balance should show 0 if the set "due date" is say 20.4.2016. From 20.4.2016, if there has not been another payment, the balance should show -100.

I hope i could convey what i meant ;-)

Enable calculation of partial month rent for partial month tenancy

Hi, as mendtioned in the now closed PR #21, I think it is a good idea to enable the calculation of partial month rents.

In the case that we calculate the rent for a tenancy based on the begin/end of a tenancy (AND independently of the rentrevision dates), I think we need to introduce the parameters tenancy_begin_date, tenancy_end_date into the function revision_to_cashflows

Proposal:

def revision_to_cashflows(rev, end_date, tenancy_begin_date = date(2015, 6, 1), tenancy_end_date = date(2015, 12, 13)):
    """Converts a revision to a list of cashflows
    end_date -- the first month we do not want to take into account
    """
    end_date = rev.end_date or end_date
    if not end_date:
        end_date = next_month(date.today(),1)

    start_date = rev.start_date

    if not tenancy_end_date:
        tenancy_end_date = next_month(date.today(),1)

    delta_t = (tenancy_end_date - tenancy_begin_date).days 
    #list of dates from d1 to d2
    tenancy_date_list = [tenancy_begin_date + timedelta(days=x) for x in range(0, delta_t+1)]

    delta_r = (end_date - start_date).days 
    #list of dates from d1 to d2
    revision_date_list = [start_date + timedelta(days=x) for x in range(0, delta_r+1)]


    intersect_date_list = list(set(revision_date_list).intersection(set(tenancy_date_list)))


    result = []

    month_year_list = [(d.year, d.month) for d in intersect_date_list]

    #generate-list-of-tuples (year,month, days-in-month, full-month) from-list-of-dates

    year_month_ndays_full = [(k[0],k[1],v , True if  monthrange(k[0], k[1])[1] == v else False) for k,v in Counter(month_year_list).iteritems()]


    for d in year_month_ndays_full:

        date_info = date(d[0],d[1],1)
        #if full month
        if d[3] == True:
            result.append(Cashflow(date_info, - rev.rent, _('RENT ') ))
            if rev.provision != 0:
                result.append(Cashflow(date_info, -rev.provision, _('PROVISION ') ))

        #if partial month, divide by days of month rented
        else:
            daysinmonth = monthrange(date_info.year, date_info.month)[1]
            rented_days = d[2]

            result.append(Cashflow(date_info, -(rev.rent/daysinmonth*rented_days),\
             ungettext("RENT for %(day)s day in partial month",\
                "RENT for %(day)s days in in partial month", rented_days) % {'day': str(rented_days)}))
            if rev.provision != 0:
                result.append(Cashflow(date_info, -(rev.provision/daysinmonth*rented_days), \
                    ungettext("PROVISION for %(day)s day in partial month",\
                        "PROVISION for %(day)s days in in partial month", rented_days) % {'day': str(rented_days)}))
    return result

Of course the TenantBalanceTests will have to be widely adapted then.

Happy to learn about a simpler approach ;-)

Bank import

Parse the bank statement, try to match payments to tenants, redirect to a confirmation screen allowing manual overrides, save the import

UI: enable folding of all cashflows for one year

Allow folding of all cashflows for a year in tenants.html (using same js function as for folding all cashflows per tenant)

I think tis makes sense fpr a good UX, especially once there are severeal years of cashflows for a tenant

Improve bank import guessing

The value of 3.0 is working great for my sole customer but it is highly dependant on the tenant database.
A better alternative would be to have the user select the threshold via a range input at the top of the import screen. This setting should be persisted in the database

Is This Project Alive

Hello @oadam,
We were looking to try this project out and noticed it hasn't been updated in some time. Could you advise as to the status?

Thanks.

Add feature to setup reminders regarding a specific tenant

Add a "setup a reminder" button in the tenant list. The button could have a different colour:
-grey if no reminder is in place
-green if reminders have been setup but none has expired yet
-red if a reminder has expired and need to be actionned

I think the whole feature should be implemented in ajax

Enable copying payment in admin panel

I dont know how much work tis would be but I think it would be convenient to be able to manually copy payment process in the admin panel, to save work

Bank import: have a customizable list of event per property and per building

For exemple we want to store when a payment is taken from the account to pay for the electricity bill of a given property. We have the same requirement at the building level.

There should be a list, managed in the admin app, of cashflow categories. These categories should be either building-grained of property-grained, and should display in the import.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.