Anoop пре 2 година
родитељ
комит
e6aa66527b
81 измењених фајлова са 392 додато и 392 уклоњено
  1. +15
    -15
      muezzin/api/property_contract.py
  2. +7
    -7
      muezzin/api/property_dashboard.py
  3. +1
    -1
      muezzin/config/desktop.py
  4. +2
    -2
      muezzin/config/property_management.py
  5. +6
    -6
      muezzin/events/sales_invoice.py
  6. +5
    -5
      muezzin/hooks.py
  7. +2
    -2
      muezzin/property_management/doctype/auction/auction.js
  8. +2
    -2
      muezzin/property_management/doctype/auction/auction.py
  9. +1
    -1
      muezzin/property_management/doctype/auction/test_auction.py
  10. +1
    -1
      muezzin/property_management/doctype/auction_free_card/auction_free_card.js
  11. +7
    -7
      muezzin/property_management/doctype/auction_free_card/auction_free_card.py
  12. +1
    -1
      muezzin/property_management/doctype/auction_free_card/test_auction_free_card.py
  13. +2
    -2
      muezzin/property_management/doctype/auction_unit/auction_unit.py
  14. +2
    -2
      muezzin/property_management/doctype/contract_annual_raise/contract_annual_raise.py
  15. +2
    -2
      muezzin/property_management/doctype/contract_payments/contract_payments.py
  16. +1
    -1
      muezzin/property_management/doctype/court/court.js
  17. +2
    -2
      muezzin/property_management/doctype/court/court.py
  18. +1
    -1
      muezzin/property_management/doctype/court/test_court.py
  19. +3
    -3
      muezzin/property_management/doctype/discount_request/discount_request.js
  20. +7
    -7
      muezzin/property_management/doctype/discount_request/discount_request.py
  21. +1
    -1
      muezzin/property_management/doctype/discount_request/test_discount_request.py
  22. +2
    -2
      muezzin/property_management/doctype/document/document.py
  23. +1
    -1
      muezzin/property_management/doctype/document_type/document_type.js
  24. +2
    -2
      muezzin/property_management/doctype/document_type/document_type.py
  25. +1
    -1
      muezzin/property_management/doctype/document_type/test_document_type.py
  26. +2
    -2
      muezzin/property_management/doctype/maintenance_ticket/maintenance_ticket.js
  27. +2
    -2
      muezzin/property_management/doctype/maintenance_ticket/maintenance_ticket.py
  28. +1
    -1
      muezzin/property_management/doctype/maintenance_ticket/test_maintenance_ticket.py
  29. +1
    -1
      muezzin/property_management/doctype/opening_phase/opening_phase.js
  30. +2
    -2
      muezzin/property_management/doctype/opening_phase/opening_phase.py
  31. +1
    -1
      muezzin/property_management/doctype/opening_phase/test_opening_phase.py
  32. +8
    -8
      muezzin/property_management/doctype/property/property.js
  33. +2
    -2
      muezzin/property_management/doctype/property/property.py
  34. +1
    -1
      muezzin/property_management/doctype/property/test_property.py
  35. +52
    -52
      opy).py
  36. +12
    -12
      muezzin/property_management/doctype/property_contract/property_contract.js
  37. +52
    -52
      muezzin/property_management/doctype/property_contract/property_contract.py
  38. +1
    -1
      muezzin/property_management/doctype/property_contract/test_property_contract.py
  39. +1
    -1
      muezzin/property_management/doctype/property_type/property_type.js
  40. +2
    -2
      muezzin/property_management/doctype/property_type/property_type.py
  41. +1
    -1
      muezzin/property_management/doctype/property_type/test_property_type.py
  42. +2
    -2
      muezzin/property_management/doctype/property_unit_detail/property_unit_detail.py
  43. +1
    -1
      muezzin/property_management/doctype/real_estate_offer/real_estate_offer.js
  44. +2
    -2
      muezzin/property_management/doctype/real_estate_offer/real_estate_offer.py
  45. +1
    -1
      muezzin/property_management/doctype/real_estate_offer/test_real_estate_offer.py
  46. +1
    -1
      muezzin/property_management/doctype/real_estate_order/real_estate_order.js
  47. +2
    -2
      muezzin/property_management/doctype/real_estate_order/real_estate_order.py
  48. +1
    -1
      muezzin/property_management/doctype/real_estate_order/test_real_estate_order.py
  49. +2
    -2
      muezzin/property_management/doctype/reservation_repayment_schedule/reservation_repayment_schedule.py
  50. +5
    -5
      muezzin/property_management/doctype/reservations/reservations.js
  51. +17
    -17
      muezzin/property_management/doctype/reservations/reservations.py
  52. +1
    -1
      muezzin/property_management/doctype/reservations/test_reservations.py
  53. +1
    -1
      muezzin/property_management/doctype/script/script.js
  54. +2
    -2
      muezzin/property_management/doctype/script/script.py
  55. +1
    -1
      muezzin/property_management/doctype/script/test_script.py
  56. +1
    -1
      muezzin/property_management/doctype/tenant_brand_name/tenant_brand_name.js
  57. +2
    -2
      muezzin/property_management/doctype/tenant_brand_name/tenant_brand_name.py
  58. +1
    -1
      muezzin/property_management/doctype/tenant_brand_name/test_tenant_brand_name.py
  59. +1
    -1
      muezzin/property_management/doctype/unit/test_unit.py
  60. +21
    -21
      muezzin/property_management/doctype/unit/unit.js
  61. +5
    -5
      muezzin/property_management/doctype/unit/unit.py
  62. +1
    -1
      muezzin/property_management/doctype/unit/unit_dashboard.py
  63. +1
    -1
      muezzin/property_management/doctype/unit_activity/test_unit_activity.py
  64. +1
    -1
      muezzin/property_management/doctype/unit_activity/unit_activity.js
  65. +2
    -2
      muezzin/property_management/doctype/unit_activity/unit_activity.py
  66. +1
    -1
      muezzin/property_management/doctype/unit_sale_contract/test_unit_sale_contract.py
  67. +3
    -3
      muezzin/property_management/doctype/unit_sale_contract/unit_sale_contract.js
  68. +2
    -2
      muezzin/property_management/doctype/unit_sale_contract/unit_sale_contract.py
  69. +1
    -1
      muezzin/property_management/doctype/unit_type/test_unit_type.py
  70. +1
    -1
      muezzin/property_management/doctype/unit_type/unit_type.js
  71. +2
    -2
      muezzin/property_management/doctype/unit_type/unit_type.py
  72. +6
    -6
      muezzin/property_management/page/property_dashboard/property_dashboard.js
  73. +4
    -4
      muezzin/property_management/report/property_management_revenue/property_management_revenue.js
  74. +10
    -10
      muezzin/property_management/report/property_management_revenue/property_management_revenue.py
  75. +4
    -4
      muezzin/property_management/report/rent_roll/rent_roll.js
  76. +14
    -14
      muezzin/property_management/report/rent_roll/rent_roll.py
  77. +4
    -4
      muezzin/property_management/report/service_charge_roll/service_charge_roll.js
  78. +10
    -10
      muezzin/property_management/report/service_charge_roll/service_charge_roll.py
  79. +1
    -1
      muezzin/property_management/report/sold_unit/sold_unit.js
  80. +31
    -31
      muezzin/property_management/report/sold_unit/sold_unit.py
  81. +5
    -5
      muezzin/public/js/payment_entry.js

+ 15
- 15
muezzin/api/property_contract.py Прегледај датотеку

@@ -1,7 +1,7 @@
import frappe
import xhiveframework
import json import json


@frappe.whitelist()
@xhiveframework.whitelist()
def change_contract_status(doc, status): def change_contract_status(doc, status):
""" """
Validates if property already on rent between the from and to dates Validates if property already on rent between the from and to dates
@@ -9,11 +9,11 @@ def change_contract_status(doc, status):
doc = json.loads(doc) doc = json.loads(doc)


if status == "Hold": if status == "Hold":
doc = frappe.get_doc("Property Contract", doc["name"])
doc = xhiveframework.get_doc("Property Contract", doc["name"])
doc.status = status doc.status = status
doc.save() doc.save()


unit_doc = frappe.get_doc("Unit", doc.unit)
unit_doc = xhiveframework.get_doc("Unit", doc.unit)
unit_doc.status = "Vacant" unit_doc.status = "Vacant"
unit_doc.save() unit_doc.save()
return return
@@ -25,13 +25,13 @@ def change_contract_status(doc, status):
"unit_name": doc["unit_name"], "unit_name": doc["unit_name"],
"status": ["!=", "Hold"] "status": ["!=", "Hold"]
} }
property_contract = frappe.get_list("Property Contract",
property_contract = xhiveframework.get_list("Property Contract",
fields = ["name"], fields = ["name"],
filters = filters) filters = filters)


if len(property_contract)> 0: if len(property_contract)> 0:
frappe.throw(f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.")
xhiveframework.throw(f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.")




# Get Property Contaract if to date is between new from and new to date # Get Property Contaract if to date is between new from and new to date
@@ -41,13 +41,13 @@ def change_contract_status(doc, status):
"unit_name": doc["unit_name"], "unit_name": doc["unit_name"],
"status": ["!=", "Hold"] "status": ["!=", "Hold"]
} }
property_contract = frappe.get_list("Property Contract",
property_contract = xhiveframework.get_list("Property Contract",
fields = ["name"], fields = ["name"],
filters = filters) filters = filters)


if len(property_contract)> 0: if len(property_contract)> 0:
frappe.throw(f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.")
xhiveframework.throw(f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.")




# Get Property Contaract if from date is after new from date and to date is before new to date # Get Property Contaract if from date is after new from date and to date is before new to date
@@ -58,19 +58,19 @@ def change_contract_status(doc, status):
"unit_name": doc["unit_name"], "unit_name": doc["unit_name"],
"status": ["!=", "Hold"] "status": ["!=", "Hold"]
} }
property_contract = frappe.get_list("Property Contract",
property_contract = xhiveframework.get_list("Property Contract",
fields = ["name"], fields = ["name"],
filters = filters) filters = filters)


if len(property_contract)> 0: if len(property_contract)> 0:
frappe.throw(f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.")
xhiveframework.throw(f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.")




doc = frappe.get_doc("Property Contract", doc["name"])
doc = xhiveframework.get_doc("Property Contract", doc["name"])
doc.status = status doc.status = status
doc.save() doc.save()


unit_doc = frappe.get_doc("Unit", doc.unit_name)
unit_doc = xhiveframework.get_doc("Unit", doc.unit_name)
unit_doc.status = "Leased" unit_doc.status = "Leased"
unit_doc.save() unit_doc.save()

+ 7
- 7
muezzin/api/property_dashboard.py Прегледај датотеку

@@ -1,17 +1,17 @@
import frappe
import xhiveframework




@frappe.whitelist()
@xhiveframework.whitelist()
def get_tiles_data(): def get_tiles_data():
''' '''
function will use to get property dashboard's tiles data function will use to get property dashboard's tiles data
''' '''


properties = frappe.db.count("Property")
units = frappe.db.count("Unit")
sold_units = frappe.db.count("Unit", {"status": "Sold"})
rented_units = frappe.db.count("Unit", {"status": "Rented"})
available_units = frappe.db.count("Unit", {"status": "Available"})
properties = xhiveframework.db.count("Property")
units = xhiveframework.db.count("Unit")
sold_units = xhiveframework.db.count("Unit", {"status": "Sold"})
rented_units = xhiveframework.db.count("Unit", {"status": "Rented"})
available_units = xhiveframework.db.count("Unit", {"status": "Available"})


data = { data = {
"total_property": properties, "total_property": properties,


+ 1
- 1
muezzin/config/desktop.py Прегледај датотеку

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import unicode_literals from __future__ import unicode_literals
from frappe import _
from xhiveframework import _


def get_data(): def get_data():
return [ return [


+ 2
- 2
muezzin/config/property_management.py Прегледај датотеку

@@ -1,5 +1,5 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from frappe import _
from xhiveframework import _




def get_data(): def get_data():
@@ -66,7 +66,7 @@ def get_data():
"type": "doctype", "type": "doctype",
"name": "Property Type", "name": "Property Type",
"onboard": 1 "onboard": 1
},
},
{ {
"type": "doctype", "type": "doctype",
"name": "Unit Activity", "name": "Unit Activity",


+ 6
- 6
muezzin/events/sales_invoice.py Прегледај датотеку

@@ -1,25 +1,25 @@
import frappe
import xhiveframework


def submit(doc, method): def submit(doc, method):
if hasattr(doc, 'property') and doc.property: if hasattr(doc, 'property') and doc.property:
prop = frappe.get_doc('Property', doc.property)
prop = xhiveframework.get_doc('Property', doc.property)
prop.customer = doc.customer prop.customer = doc.customer
prop.customer_name = doc.customer_name prop.customer_name = doc.customer_name
prop.save() prop.save()
if hasattr(doc, 'unit') and doc.unit: if hasattr(doc, 'unit') and doc.unit:
unit = frappe.get_doc('Unit', doc.unit)
unit = xhiveframework.get_doc('Unit', doc.unit)
unit.customer = doc.customer unit.customer = doc.customer
unit.customer_name = doc.customer_name unit.customer_name = doc.customer_name
unit.save() unit.save()


def cancel(doc, method): def cancel(doc, method):
if hasattr(doc, 'property') and doc.property: if hasattr(doc, 'property') and doc.property:
prop = frappe.get_doc('Property', doc.property)
prop = xhiveframework.get_doc('Property', doc.property)
prop.customer = None prop.customer = None
prop.customer_name = None prop.customer_name = None
prop.save() prop.save()
if hasattr(doc, 'unit') and doc.unit: if hasattr(doc, 'unit') and doc.unit:
unit = frappe.get_doc('Unit', doc.unit)
unit = xhiveframework.get_doc('Unit', doc.unit)
unit.customer = None unit.customer = None
unit.customer_name = None unit.customer_name = None
unit.save()
unit.save()

+ 5
- 5
muezzin/hooks.py Прегледај датотеку

@@ -62,7 +62,7 @@ doctype_js = {


# Desk Notifications # Desk Notifications
# ------------------ # ------------------
# See frappe.core.notifications.get_notification_config
# See xhiveframework.core.notifications.get_notification_config


# notification_config = "muezzin.notifications.get_notification_config" # notification_config = "muezzin.notifications.get_notification_config"


@@ -71,11 +71,11 @@ doctype_js = {
# Permissions evaluated in scripted ways # Permissions evaluated in scripted ways


# permission_query_conditions = { # permission_query_conditions = {
# "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions",
# "Event": "xhiveframework.desk.doctype.event.event.get_permission_query_conditions",
# } # }
# #
# has_permission = { # has_permission = {
# "Event": "frappe.desk.doctype.event.event.has_permission",
# "Event": "xhiveframework.desk.doctype.event.event.has_permission",
# } # }


# Document Events # Document Events
@@ -120,12 +120,12 @@ scheduler_events = {
# ------------------------------ # ------------------------------
# #
# override_whitelisted_methods = { # override_whitelisted_methods = {
# "frappe.desk.doctype.event.event.get_events": "muezzin.event.get_events"
# "xhiveframework.desk.doctype.event.event.get_events": "muezzin.event.get_events"
# } # }
# #
# each overriding function accepts a `data` argument; # each overriding function accepts a `data` argument;
# generated from the base implementation of the doctype dashboard, # generated from the base implementation of the doctype dashboard,
# along with any modifications made in other Frappe apps
# along with any modifications made in other Xhiveframework apps
# override_doctype_dashboards = { # override_doctype_dashboards = {
# "Task": "muezzin.task.get_dashboard_data" # "Task": "muezzin.task.get_dashboard_data"
# } # }


+ 2
- 2
muezzin/property_management/doctype/auction/auction.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Auction', {
xhiveframework.ui.form.on('Auction', {
refresh: function(frm) { refresh: function(frm) {
frm.set_query('property', () => { frm.set_query('property', () => {
return { return {
@@ -19,7 +19,7 @@ frappe.ui.form.on('Auction', {


property: function(frm) { property: function(frm) {
if (frm.doc.property) { if (frm.doc.property) {
frappe.db.get_value('Property', frm.doc.property, 'property_type')
xhiveframework.db.get_value('Property', frm.doc.property, 'property_type')
.then( r=> { .then( r=> {
if (r.message) { if (r.message) {
frm.doc.property_type = r.message.property_type; frm.doc.property_type = r.message.property_type;


+ 2
- 2
muezzin/property_management/doctype/auction/auction.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class Auction(Document): class Auction(Document):
pass pass

+ 1
- 1
muezzin/property_management/doctype/auction/test_auction.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestAuction(unittest.TestCase): class TestAuction(unittest.TestCase):


+ 1
- 1
muezzin/property_management/doctype/auction_free_card/auction_free_card.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Auction Free Card', {
xhiveframework.ui.form.on('Auction Free Card', {
refresh: function(frm) { refresh: function(frm) {
frm.set_query('units', () => { frm.set_query('units', () => {
if (frm.doc.auction) { if (frm.doc.auction) {


+ 7
- 7
muezzin/property_management/doctype/auction_free_card/auction_free_card.py Прегледај датотеку

@@ -3,22 +3,22 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
import frappe
from frappe.model.document import Document
import xhiveframework
from xhiveframework.model.document import Document


class AuctionFreeCard(Document): class AuctionFreeCard(Document):
def set_unit(self): def set_unit(self):
result = frappe.db.get_list('Auction Unit', {'parent': self.auction}, 'unit')
result = xhiveframework.db.get_list('Auction Unit', {'parent': self.auction}, 'unit')
for row in result: for row in result:
self.append('units', { self.append('units', {
'unit': row.unit 'unit': row.unit
}) })


@frappe.whitelist()
@xhiveframework.whitelist()
def get_unit(doctype, txt, searchfield, start, page_len, filters): def get_unit(doctype, txt, searchfield, start, page_len, filters):
return frappe.db.sql("""select unit
return xhiveframework.db.sql("""select unit
from `tabAuction Unit` from `tabAuction Unit`
where where
parent = {auction}""" parent = {auction}"""
.format(auction = frappe.db.escape(filters.get("auction"))
))
.format(auction = xhiveframework.db.escape(filters.get("auction"))
))

+ 1
- 1
muezzin/property_management/doctype/auction_free_card/test_auction_free_card.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestAuctionFreeCard(unittest.TestCase): class TestAuctionFreeCard(unittest.TestCase):


+ 2
- 2
muezzin/property_management/doctype/auction_unit/auction_unit.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class AuctionUnit(Document): class AuctionUnit(Document):
pass pass

+ 2
- 2
muezzin/property_management/doctype/contract_annual_raise/contract_annual_raise.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class ContractAnnualRaise(Document): class ContractAnnualRaise(Document):
pass pass

+ 2
- 2
muezzin/property_management/doctype/contract_payments/contract_payments.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class ContractPayments(Document): class ContractPayments(Document):
pass pass

+ 1
- 1
muezzin/property_management/doctype/court/court.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Court', {
xhiveframework.ui.form.on('Court', {
// refresh: function(frm) { // refresh: function(frm) {


// } // }


+ 2
- 2
muezzin/property_management/doctype/court/court.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class Court(Document): class Court(Document):
pass pass

+ 1
- 1
muezzin/property_management/doctype/court/test_court.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestCourt(unittest.TestCase): class TestCourt(unittest.TestCase):


+ 3
- 3
muezzin/property_management/doctype/discount_request/discount_request.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Discount Request', {
xhiveframework.ui.form.on('Discount Request', {
refresh: function (frm) { refresh: function (frm) {
get_brand_names(frm) get_brand_names(frm)
}, },
@@ -24,7 +24,7 @@ frappe.ui.form.on('Discount Request', {


let get_brand_names = function (frm) { let get_brand_names = function (frm) {
if (frm.doc.customer) { if (frm.doc.customer) {
frappe.call({
xhiveframework.call({
method: "get_brand_names", method: "get_brand_names",
doc: frm.doc, doc: frm.doc,
callback: function (data) { callback: function (data) {
@@ -36,4 +36,4 @@ let get_brand_names = function (frm) {
} }
}) })
} }
}
}

+ 7
- 7
muezzin/property_management/doctype/discount_request/discount_request.py Прегледај датотеку

@@ -3,9 +3,9 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
import frappe
from frappe.model.document import Document
from frappe.utils import flt
import xhiveframework
from xhiveframework.model.document import Document
from xhiveframework.utils import flt




class DiscountRequest(Document): class DiscountRequest(Document):
@@ -17,7 +17,7 @@ class DiscountRequest(Document):


def get_brand_names(self): def get_brand_names(self):
list_items = [] list_items = []
brands = frappe.get_all("Tenant Brand Name", filters={"parent": self.customer}, fields=['tenant_brand_name'],
brands = xhiveframework.get_all("Tenant Brand Name", filters={"parent": self.customer}, fields=['tenant_brand_name'],
order_by="tenant_brand_name") order_by="tenant_brand_name")
if brands: if brands:
for item in brands: for item in brands:
@@ -30,9 +30,9 @@ class DiscountRequest(Document):
"invoice": ["=", '']} "invoice": ["=", '']}
if self.apply_discount_on != "All": if self.apply_discount_on != "All":
filters['reason'] = self.apply_discount_on filters['reason'] = self.apply_discount_on
payments = frappe.db.get_all("Contract Payments", filters=filters, order_by="date")
payments = xhiveframework.db.get_all("Contract Payments", filters=filters, order_by="date")
for row in payments: for row in payments:
doc = frappe.get_doc("Contract Payments", row["name"])
doc = xhiveframework.get_doc("Contract Payments", row["name"])
if type == 'Add': if type == 'Add':
doc.amount -= ( doc.amount -= (
((flt(self.percentage) / 100) * flt(doc.amount)) if self.discount_type == 'Percentage' else flt( ((flt(self.percentage) / 100) * flt(doc.amount)) if self.discount_type == 'Percentage' else flt(
@@ -49,4 +49,4 @@ class DiscountRequest(Document):


doc.flags.ignore_validate_update_after_submit = True doc.flags.ignore_validate_update_after_submit = True
doc.save() doc.save()
frappe.db.commit()
xhiveframework.db.commit()

+ 1
- 1
muezzin/property_management/doctype/discount_request/test_discount_request.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestDiscountRequest(unittest.TestCase): class TestDiscountRequest(unittest.TestCase):


+ 2
- 2
muezzin/property_management/doctype/document/document.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class Document(Document): class Document(Document):
pass pass

+ 1
- 1
muezzin/property_management/doctype/document_type/document_type.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Document Type', {
xhiveframework.ui.form.on('Document Type', {
// refresh: function(frm) { // refresh: function(frm) {


// } // }


+ 2
- 2
muezzin/property_management/doctype/document_type/document_type.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class DocumentType(Document): class DocumentType(Document):
pass pass

+ 1
- 1
muezzin/property_management/doctype/document_type/test_document_type.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestDocumentType(unittest.TestCase): class TestDocumentType(unittest.TestCase):


+ 2
- 2
muezzin/property_management/doctype/maintenance_ticket/maintenance_ticket.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Maintenance Ticket', {
xhiveframework.ui.form.on('Maintenance Ticket', {
refresh: function(frm) { refresh: function(frm) {
queries(frm); queries(frm);
}, },
@@ -44,4 +44,4 @@ function queries(frm) {
// frm.doc.latitude = frm.fields_dict.property_location.map.getCenter()['lat']; // frm.doc.latitude = frm.fields_dict.property_location.map.getCenter()['lat'];
// frm.doc.longitude = frm.fields_dict.property_location.map.getCenter()['lng']; // frm.doc.longitude = frm.fields_dict.property_location.map.getCenter()['lng'];
// } // }
// }
// }

+ 2
- 2
muezzin/property_management/doctype/maintenance_ticket/maintenance_ticket.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class MaintenanceTicket(Document): class MaintenanceTicket(Document):
pass pass

+ 1
- 1
muezzin/property_management/doctype/maintenance_ticket/test_maintenance_ticket.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestMaintenanceTicket(unittest.TestCase): class TestMaintenanceTicket(unittest.TestCase):


+ 1
- 1
muezzin/property_management/doctype/opening_phase/opening_phase.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Opening Phase', {
xhiveframework.ui.form.on('Opening Phase', {
// refresh: function(frm) { // refresh: function(frm) {


// } // }


+ 2
- 2
muezzin/property_management/doctype/opening_phase/opening_phase.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class OpeningPhase(Document): class OpeningPhase(Document):
pass pass

+ 1
- 1
muezzin/property_management/doctype/opening_phase/test_opening_phase.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestOpeningPhase(unittest.TestCase): class TestOpeningPhase(unittest.TestCase):


+ 8
- 8
muezzin/property_management/doctype/property/property.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Property', {
xhiveframework.ui.form.on('Property', {
refresh: function(frm) { refresh: function(frm) {
if (!frm.is_dirty()) { if (!frm.is_dirty()) {
create_custom_buttons(frm); create_custom_buttons(frm);
@@ -12,8 +12,8 @@ frappe.ui.form.on('Property', {
const create_custom_buttons = function(frm) { const create_custom_buttons = function(frm) {
frm.add_custom_button(__('Journal Entry'), () => { frm.add_custom_button(__('Journal Entry'), () => {
let doc = frm.doc let doc = frm.doc
frappe.run_serially([
() => frappe.new_doc('Journal Entry'),
xhiveframework.run_serially([
() => xhiveframework.new_doc('Journal Entry'),
() => { () => {
cur_frm.doc.cost_center = doc.cost_center; cur_frm.doc.cost_center = doc.cost_center;
cur_frm.doc.property = doc.name; cur_frm.doc.property = doc.name;
@@ -24,8 +24,8 @@ const create_custom_buttons = function(frm) {


frm.add_custom_button(__('Sales Invoice'), () => { frm.add_custom_button(__('Sales Invoice'), () => {
let doc = frm.doc let doc = frm.doc
frappe.run_serially([
() => frappe.new_doc('Sales Invoice'),
xhiveframework.run_serially([
() => xhiveframework.new_doc('Sales Invoice'),
() => { () => {
cur_frm.doc.cost_center = doc.cost_center; cur_frm.doc.cost_center = doc.cost_center;
cur_frm.doc.property = doc.name; cur_frm.doc.property = doc.name;
@@ -36,8 +36,8 @@ const create_custom_buttons = function(frm) {


frm.add_custom_button(__('Payment Entry'), () => { frm.add_custom_button(__('Payment Entry'), () => {
let doc = frm.doc let doc = frm.doc
frappe.run_serially([
() => frappe.new_doc('Payment Entry'),
xhiveframework.run_serially([
() => xhiveframework.new_doc('Payment Entry'),
() => { () => {
cur_frm.doc.cost_center = doc.cost_center; cur_frm.doc.cost_center = doc.cost_center;
cur_frm.doc.property = doc.name; cur_frm.doc.property = doc.name;
@@ -55,4 +55,4 @@ const create_custom_buttons = function(frm) {
} }
]); ]);
}, __('Create')); }, __('Create'));
}
}

+ 2
- 2
muezzin/property_management/doctype/property/property.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class Property(Document): class Property(Document):
pass pass

+ 1
- 1
muezzin/property_management/doctype/property/test_property.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestProperty(unittest.TestCase): class TestProperty(unittest.TestCase):


muezzin/property_management/doctype/property_contract/property_contract → opy).py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
import frappe
from frappe import _
import xhiveframework
from xhiveframework import _
import datetime import datetime
# from datetime import datetime, timedelta # from datetime import datetime, timedelta
import dateutil import dateutil
@@ -13,8 +13,8 @@ from calendar import weekday, monthrange
from collections import Counter from collections import Counter
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from dateutil.rrule import rrule, MONTHLY, YEARLY from dateutil.rrule import rrule, MONTHLY, YEARLY
from frappe.model.document import Document
from frappe.utils import flt, date_diff, getdate, cint, nowdate,get_datetime
from xhiveframework.model.document import Document
from xhiveframework.utils import flt, date_diff, getdate, cint, nowdate,get_datetime




class PropertyContract(Document): class PropertyContract(Document):
@@ -35,13 +35,13 @@ class PropertyContract(Document):
"unit": self.unit, "unit": self.unit,
"status": ["!=", "Hold"] "status": ["!=", "Hold"]
} }
property_contract = frappe.get_list("Property Contract",
property_contract = xhiveframework.get_list("Property Contract",
fields = ["name"], fields = ["name"],
filters = filters) filters = filters)


if len(property_contract)> 0: if len(property_contract)> 0:
frappe.throw(f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.")
xhiveframework.throw(f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.")




# Get Property Contaract if to date is between new from and new to date # Get Property Contaract if to date is between new from and new to date
@@ -51,13 +51,13 @@ class PropertyContract(Document):
"unit": self.unit, "unit": self.unit,
"status": ["!=", "Hold"] "status": ["!=", "Hold"]
} }
property_contract = frappe.get_list("Property Contract",
property_contract = xhiveframework.get_list("Property Contract",
fields = ["name"], fields = ["name"],
filters = filters) filters = filters)


if len(property_contract)> 0: if len(property_contract)> 0:
frappe.throw(f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.")
xhiveframework.throw(f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.")




# Get Property Contaract if from date is after new from date and to date is before new to date # Get Property Contaract if from date is after new from date and to date is before new to date
@@ -68,17 +68,17 @@ class PropertyContract(Document):
"unit": self.unit, "unit": self.unit,
"status": ["!=", "Hold"] "status": ["!=", "Hold"]
} }
property_contract = frappe.get_list("Property Contract",
property_contract = xhiveframework.get_list("Property Contract",
fields = ["name"], fields = ["name"],
filters = filters) filters = filters)


if len(property_contract)> 0: if len(property_contract)> 0:
frappe.throw(f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.")
xhiveframework.throw(f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.")


diff_days = date_diff(self.rent_end_date,getdate()) diff_days = date_diff(self.rent_end_date,getdate())
if flt(diff_days) > 0: if flt(diff_days) > 0:
frappe.db.set_value("Unit", self.unit, "status", "Leased")
xhiveframework.db.set_value("Unit", self.unit, "status", "Leased")


def add_contract_annual_raise(self): def add_contract_annual_raise(self):
self.contract_annual_raise = [] self.contract_annual_raise = []
@@ -100,7 +100,7 @@ class PropertyContract(Document):
duration = self.duration - 1 if self.duration > 1 else self.duration duration = self.duration - 1 if self.duration > 1 else self.duration
month = dateutil.relativedelta.relativedelta(months=duration) month = dateutil.relativedelta.relativedelta(months=duration)
end_date = start_date + month end_date = start_date + month
if not self.annual_raise_start_date: if not self.annual_raise_start_date:
duration_to_add = 13 - start_date.month duration_to_add = 13 - start_date.month
months = dateutil.relativedelta.relativedelta(months = duration_to_add) months = dateutil.relativedelta.relativedelta(months = duration_to_add)
@@ -109,7 +109,7 @@ class PropertyContract(Document):


annual_raise_start_date = datetime.datetime.strptime(str(self.annual_raise_start_date), "%Y-%m-%d") annual_raise_start_date = datetime.datetime.strptime(str(self.annual_raise_start_date), "%Y-%m-%d")
service_charge_start_date = datetime.datetime.strptime(str(self.service_charge_start_date), "%Y-%m-%d") service_charge_start_date = datetime.datetime.strptime(str(self.service_charge_start_date), "%Y-%m-%d")
frequency = 0 frequency = 0
if self.type == 'Customized c': if self.type == 'Customized c':
if self.payments_scheduling: if self.payments_scheduling:
@@ -319,14 +319,14 @@ class PropertyContract(Document):
self.save() self.save()


def on_cancel(self): def on_cancel(self):
frappe.db.set_value("Unit", self.unit, "status", "Vacant")
xhiveframework.db.set_value("Unit", self.unit, "status", "Vacant")


def create_row_invoice(self,rowid): def create_row_invoice(self,rowid):
create_sales_invoice(self.name,rowid) create_sales_invoice(self.name,rowid)


def get_brand_names(self): def get_brand_names(self):
list_items = [] list_items = []
brands = frappe.get_all("Tenant Brand Name", filters={"parent": self.renter}, fields=['tenant_brand_name'], order_by="tenant_brand_name")
brands = xhiveframework.get_all("Tenant Brand Name", filters={"parent": self.renter}, fields=['tenant_brand_name'], order_by="tenant_brand_name")
if brands: if brands:
for item in brands: for item in brands:
list_items.append(item["tenant_brand_name"]) list_items.append(item["tenant_brand_name"])
@@ -335,10 +335,10 @@ class PropertyContract(Document):


def update_duration(self): def update_duration(self):
duration = self.get_dates_diff(self.rent_start_date,self.rent_end_date) duration = self.get_dates_diff(self.rent_start_date,self.rent_end_date)
# frappe.msgprint(str(duration))
# xhiveframework.msgprint(str(duration))


duration_months = (cint(duration["years"]) * 12) + cint(duration["months"]) + (1 if cint(duration["days"]) > 0 or getdate(self.rent_end_date).day == 1 else 0) duration_months = (cint(duration["years"]) * 12) + cint(duration["months"]) + (1 if cint(duration["days"]) > 0 or getdate(self.rent_end_date).day == 1 else 0)
# frappe.msgprint(str(duration_months))
# xhiveframework.msgprint(str(duration_months))
self.duration = duration_months self.duration = duration_months


return duration_months return duration_months
@@ -360,15 +360,15 @@ def create_sales_invoice(docname="",rowid=""):
print("Starting Creation..........") print("Starting Creation..........")
condiction = "" condiction = ""
if docname and rowid: if docname and rowid:
row_doc = frappe.get_doc("Contract Payments",rowid)
row_doc = xhiveframework.get_doc("Contract Payments",rowid)
condiction = " and C.parent = '%s' " % docname condiction = " and C.parent = '%s' " % docname
# condiction += " and C.`name` = '%s' " % rowid # condiction += " and C.`name` = '%s' " % rowid
condiction += " and C.date = '%s' " % row_doc.date condiction += " and C.date = '%s' " % row_doc.date
invoices = frappe.db.sql("""
invoices = xhiveframework.db.sql("""
select *,P.`name` contract_name,C.date invoice_date,C.amount row_amount select *,P.`name` contract_name,C.date invoice_date,C.amount row_amount
from `tabProperty Contract` P from `tabProperty Contract` P
inner JOIN inner JOIN
`tabContract Payments` C
`tabContract Payments` C
on P.`name` = C.parent on P.`name` = C.parent
-- and CURRENT_DATE() >= C.date -- and CURRENT_DATE() >= C.date
and P.rent_item is not NULL and P.rent_item is not NULL
@@ -388,30 +388,30 @@ def create_sales_invoice(docname="",rowid=""):
print("Finished.") print("Finished.")


def create_sales_invoices(invoices): def create_sales_invoices(invoices):
# frappe.throw(str(args))
default_company = frappe.db.get_default("Company")
si = frappe.new_doc("Sales Invoice")
# xhiveframework.throw(str(args))
default_company = xhiveframework.db.get_default("Company")
si = xhiveframework.new_doc("Sales Invoice")


if isinstance(invoices,list): if isinstance(invoices,list):
args = frappe._dict(invoices[0])
args = xhiveframework._dict(invoices[0])
else: else:
args = frappe._dict(invoices)
args = xhiveframework._dict(invoices)


invoice_date = args.date or nowdate() invoice_date = args.date or nowdate()
si.posting_date = invoice_date si.posting_date = invoice_date


debit_to = frappe.db.get_value("Company", default_company, 'default_receivable_account')
debit_to = xhiveframework.db.get_value("Company", default_company, 'default_receivable_account')
if debit_to: if debit_to:
si.debit_to = debit_to # Default Receivable Account si.debit_to = debit_to # Default Receivable Account
else: else:
frappe.throw(_("Please set Default Receivable Account in Company " + default_company))
xhiveframework.throw(_("Please set Default Receivable Account in Company " + default_company))


si.set_posting_time = 1 si.set_posting_time = 1
si.postint_date = args.invoice_date si.postint_date = args.invoice_date
si.due_date = args.invoice_date si.due_date = args.invoice_date


si.customer = args.renter si.customer = args.renter
si.tax_id = frappe.db.get_value("Customer",args.renter,"tax_id")
si.tax_id = xhiveframework.db.get_value("Customer",args.renter,"tax_id")
si.debit_to = debit_to si.debit_to = debit_to


print(str(si.postint_date)+"================================================="+str(si.due_date)) print(str(si.postint_date)+"================================================="+str(si.due_date))
@@ -420,7 +420,7 @@ def create_sales_invoices(invoices):
si.property = args.property_name si.property = args.property_name
si.unit = args.unit si.unit = args.unit
si.property_contract = args.contract_name si.property_contract = args.contract_name
invoice_curerncy = frappe.db.get_value('Customer', args.renter, "default_currency") or frappe.get_cached_value('Company', default_company, "default_currency")
invoice_curerncy = xhiveframework.db.get_value('Customer', args.renter, "default_currency") or xhiveframework.get_cached_value('Company', default_company, "default_currency")


si.currency=invoice_curerncy si.currency=invoice_curerncy
conversion_rate = 1 conversion_rate = 1
@@ -428,26 +428,26 @@ def create_sales_invoices(invoices):
conversion_rate = get_conversion_rate(invoice_curerncy,invoice_date) conversion_rate = get_conversion_rate(invoice_curerncy,invoice_date)
if conversion_rate == 0: if conversion_rate == 0:
message = _("Please Insert Currency Exchange for day {0}".format(invoice_date)) message = _("Please Insert Currency Exchange for day {0}".format(invoice_date))
frappe.throw(frappe.bold(message))
xhiveframework.throw(xhiveframework.bold(message))


si.conversion_rate = conversion_rate si.conversion_rate = conversion_rate
tax_list = [] tax_list = []
old_template = "" old_template = ""
for item in invoices: for item in invoices:
default_income_account = None default_income_account = None
item_income_account = frappe.db.get_value("Item Default", {"parent":(item.rent_item if item.reason =="Rent" else item.service_item)}, 'income_account')
company_default_income_account = frappe.db.get_value("Company", default_company, 'default_income_account')
item_income_account = xhiveframework.db.get_value("Item Default", {"parent":(item.rent_item if item.reason =="Rent" else item.service_item)}, 'income_account')
company_default_income_account = xhiveframework.db.get_value("Company", default_company, 'default_income_account')


if item_income_account: if item_income_account:
default_income_account = item_income_account default_income_account = item_income_account
elif company_default_income_account: elif company_default_income_account:
default_income_account = company_default_income_account default_income_account = company_default_income_account
else: else:
frappe.throw(_("Please set Default Income Account in Company " + default_company))
xhiveframework.throw(_("Please set Default Income Account in Company " + default_company))


cost_center = frappe.db.get_value("Company", default_company, 'cost_center')
cost_center = xhiveframework.db.get_value("Company", default_company, 'cost_center')
if not cost_center: if not cost_center:
frappe.throw(_("Please set Default Cost Center in Company " + default_company))
xhiveframework.throw(_("Please set Default Cost Center in Company " + default_company))




tax_template_name = "" tax_template_name = ""
@@ -475,11 +475,11 @@ def create_sales_invoices(invoices):
if old_template=="": if old_template=="":
old_template = tax_template_name old_template = tax_template_name


tax_data = frappe.db.sql("""
tax_data = xhiveframework.db.sql("""
select * select *
from `tabItem Tax Template Detail` from `tabItem Tax Template Detail`
where parent='{tax_template_name}' where parent='{tax_template_name}'
""".format(tax_template_name=tax_template_name),as_dict=True,debug=False) """.format(tax_template_name=tax_template_name),as_dict=True,debug=False)


if tax_data: if tax_data:
@@ -505,20 +505,20 @@ def create_sales_invoices(invoices):
try: try:
Sinv_ID = si.insert(ignore_mandatory = True) Sinv_ID = si.insert(ignore_mandatory = True)
for row in invoices: for row in invoices:
frappe.db.sql("""update `tabContract Payments` set invoice = '{0}' where `name` = '{1}' """.format(Sinv_ID.name,row.name),debug=True)
xhiveframework.db.sql("""update `tabContract Payments` set invoice = '{0}' where `name` = '{1}' """.format(Sinv_ID.name,row.name),debug=True)


return Sinv_ID return Sinv_ID
except Exception as e: except Exception as e:
print("Error......"+str(e)) print("Error......"+str(e))
frappe.throw(_(e))
xhiveframework.throw(_(e))


def get_conversion_rate(invoice_curerncy,invoice_date): def get_conversion_rate(invoice_curerncy,invoice_date):
conversion_rate = 0 conversion_rate = 0
exchange_rate = frappe.db.sql("""
select exchange_rate
from `tabCurrency Exchange`
where from_currency ='{invoice_curerncy}'
and to_currency='EGP'
exchange_rate = xhiveframework.db.sql("""
select exchange_rate
from `tabCurrency Exchange`
where from_currency ='{invoice_curerncy}'
and to_currency='EGP'
and date ='{invoice_date}' and date ='{invoice_date}'
""".format(invoice_curerncy=invoice_curerncy,invoice_date=invoice_date),as_dict=True) """.format(invoice_curerncy=invoice_curerncy,invoice_date=invoice_date),as_dict=True)
if exchange_rate: if exchange_rate:
@@ -529,17 +529,17 @@ def get_conversion_rate(invoice_curerncy,invoice_date):




def update_unit_status(): def update_unit_status():
units = frappe.db.get_list("Property Contract",filters={"docstatus":1,"rent_end_date":getdate()},fields=["unit"])
units = xhiveframework.db.get_list("Property Contract",filters={"docstatus":1,"rent_end_date":getdate()},fields=["unit"])
if units: if units:
for unit in units: for unit in units:
frappe.db.set_value("Unit", unit["unit"], "status", "Vacant")
xhiveframework.db.set_value("Unit", unit["unit"], "status", "Vacant")






def update_unit_status_basd_on_reservation(): def update_unit_status_basd_on_reservation():
print("==========================starting============================") print("==========================starting============================")
units = frappe.db.get_list("Reservations",filters={"docstatus":1,"reservation_end":["<",get_datetime()]},fields=["unit"])
units = xhiveframework.db.get_list("Reservations",filters={"docstatus":1,"reservation_end":["<",get_datetime()]},fields=["unit"])
if units: if units:
for unit in units: for unit in units:
frappe.db.set_value("Unit", unit["unit"], "status", "Vacant")
print("==========================Finished============================")
xhiveframework.db.set_value("Unit", unit["unit"], "status", "Vacant")
print("==========================Finished============================")

+ 12
- 12
muezzin/property_management/doctype/property_contract/property_contract.js Прегледај датотеку

@@ -1,17 +1,17 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Property Contract', {
xhiveframework.ui.form.on('Property Contract', {
onload: function (frm) { onload: function (frm) {
get_brand_names(frm) get_brand_names(frm)
}, },
generate_payment_scheduale: function (frm) { generate_payment_scheduale: function (frm) {
frm.doc.payment = [] frm.doc.payment = []
frappe.call({
xhiveframework.call({
method: 'add_payment', method: 'add_payment',
doc: frm.doc, doc: frm.doc,
callback: function (res) { callback: function (res) {
frappe.show_alert('Generated Successfully')
xhiveframework.show_alert('Generated Successfully')


cur_frm.reload_doc() cur_frm.reload_doc()
} }
@@ -61,7 +61,7 @@ frappe.ui.form.on('Property Contract', {


if (frm.doc.docstatus == 1 && frm.doc.status != "Hold") { if (frm.doc.docstatus == 1 && frm.doc.status != "Hold") {
frm.add_custom_button("Hold Contract", () => { frm.add_custom_button("Hold Contract", () => {
frappe.call({
xhiveframework.call({
method: "muezzin.api.property_contract.change_contract_status", method: "muezzin.api.property_contract.change_contract_status",
args: { args: {
doc: frm.doc, doc: frm.doc,
@@ -75,7 +75,7 @@ frappe.ui.form.on('Property Contract', {
} }
if (frm.doc.docstatus == 1 && frm.doc.status == "Hold") { if (frm.doc.docstatus == 1 && frm.doc.status == "Hold") {
frm.add_custom_button("Release Contract", () => { frm.add_custom_button("Release Contract", () => {
frappe.call({
xhiveframework.call({
method: "muezzin.api.property_contract.change_contract_status", method: "muezzin.api.property_contract.change_contract_status",
args: { args: {
doc: frm.doc, doc: frm.doc,
@@ -203,7 +203,7 @@ frappe.ui.form.on('Property Contract', {
} }
} }
}); });
frappe.ui.form.on('Contract Payments', {
xhiveframework.ui.form.on('Contract Payments', {
create_invoice: function (frm, cdt, cdn) { create_invoice: function (frm, cdt, cdn) {
var row = locals[cdt][cdn]; var row = locals[cdt][cdn];
if (!row.invoice) { if (!row.invoice) {
@@ -216,7 +216,7 @@ frappe.ui.form.on('Contract Payments', {
} }
}) })
} else { } else {
frappe.throw(__('Invoice Already Created..'))
xhiveframework.throw(__('Invoice Already Created..'))
} }
} }
}) })
@@ -225,7 +225,7 @@ const update_payment = function (frm) {
if (!frm.doc.rent_start_date) { if (!frm.doc.rent_start_date) {
frm.doc.duration = null; frm.doc.duration = null;
frm.refresh_field('duration'); frm.refresh_field('duration');
frappe.msgprint('Enter Rent Start Date.')
xhiveframework.msgprint('Enter Rent Start Date.')
} else { } else {
if (frm.doc.type && frm.doc.duration) { if (frm.doc.type && frm.doc.duration) {
frm.call('add_payment'); frm.call('add_payment');
@@ -241,7 +241,7 @@ const update_annual_raise_amount = function (frm) {
if (!frm.doc.rent_start_date) { if (!frm.doc.rent_start_date) {
frm.doc.duration = null; frm.doc.duration = null;
frm.refresh_field('duration'); frm.refresh_field('duration');
frappe.msgprint('Enter Rent Start Date.')
xhiveframework.msgprint('Enter Rent Start Date.')
} else { } else {
if (frm.doc.annual_raise === 'Annual Irregular' && frm.doc.duration) { if (frm.doc.annual_raise === 'Annual Irregular' && frm.doc.duration) {
frm.call('add_contract_annual_raise'); frm.call('add_contract_annual_raise');
@@ -310,7 +310,7 @@ const update_duration = function (frm) {
// let duration = get_time_diff(frm.doc.rent_end_date, frm.doc.rent_start_date) // let duration = get_time_diff(frm.doc.rent_end_date, frm.doc.rent_start_date)
// frm.set_value('duration', duration) // frm.set_value('duration', duration)


frappe.call({
xhiveframework.call({
method:'update_duration', method:'update_duration',
doc:frm.doc, doc:frm.doc,
callback:function(r){ callback:function(r){
@@ -334,7 +334,7 @@ const get_time_diff = (end, start) => {


let get_brand_names = function (frm) { let get_brand_names = function (frm) {
if (frm.doc.renter) { if (frm.doc.renter) {
frappe.call({
xhiveframework.call({
method: "muezzin.property_management.doctype.property_contract.property_contract.get_brand_names", method: "muezzin.property_management.doctype.property_contract.property_contract.get_brand_names",
args: { args: {
renter:frm.doc.renter renter:frm.doc.renter
@@ -348,4 +348,4 @@ let get_brand_names = function (frm) {
} }
}) })
} }
}
}

+ 52
- 52
muezzin/property_management/doctype/property_contract/property_contract.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
import frappe
from frappe import _
import xhiveframework
from xhiveframework import _
import datetime import datetime
# from datetime import datetime, timedelta # from datetime import datetime, timedelta
import dateutil import dateutil
@@ -13,8 +13,8 @@ from calendar import weekday, monthrange
from collections import Counter from collections import Counter
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from dateutil.rrule import rrule, MONTHLY, YEARLY from dateutil.rrule import rrule, MONTHLY, YEARLY
from frappe.model.document import Document
from frappe.utils import flt, date_diff, getdate, cint, nowdate
from xhiveframework.model.document import Document
from xhiveframework.utils import flt, date_diff, getdate, cint, nowdate




class PropertyContract(Document): class PropertyContract(Document):
@@ -36,12 +36,12 @@ class PropertyContract(Document):
"status": ["!=", "Hold"] "status": ["!=", "Hold"]
} }


property_contract = frappe.get_list("Property Contract",
property_contract = xhiveframework.get_list("Property Contract",
fields=["name"], fields=["name"],
filters=filters) filters=filters)


if len(property_contract) > 0: if len(property_contract) > 0:
frappe.throw(
xhiveframework.throw(
f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.") f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.")


# Get Property Contaract if to date is between new from and new to date # Get Property Contaract if to date is between new from and new to date
@@ -52,12 +52,12 @@ class PropertyContract(Document):
"status": ["!=", "Hold"] "status": ["!=", "Hold"]
} }


property_contract = frappe.get_list("Property Contract",
property_contract = xhiveframework.get_list("Property Contract",
fields=["name"], fields=["name"],
filters=filters) filters=filters)


if len(property_contract) > 0: if len(property_contract) > 0:
frappe.throw(
xhiveframework.throw(
f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.") f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.")


# Get Property Contaract if from date is after new from date and to date is before new to date # Get Property Contaract if from date is after new from date and to date is before new to date
@@ -69,19 +69,19 @@ class PropertyContract(Document):
"status": ["!=", "Hold"] "status": ["!=", "Hold"]
} }


property_contract = frappe.get_list("Property Contract",
property_contract = xhiveframework.get_list("Property Contract",
fields=["name"], fields=["name"],
filters=filters) filters=filters)


if len(property_contract) > 0: if len(property_contract) > 0:
frappe.throw(
xhiveframework.throw(
f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.") f"This property unit already contain a contract <a href='#Form/Property%20Contract/{property_contract[0].name}'>{property_contract[0].name}</a> that not ended yet.")


diff_days = date_diff(self.rent_end_date, getdate()) diff_days = date_diff(self.rent_end_date, getdate())
if flt(diff_days) > 0: if flt(diff_days) > 0:
frappe.db.set_value("Unit", self.unit, "status", "Leased")
xhiveframework.db.set_value("Unit", self.unit, "status", "Leased")


@frappe.whitelist()
@xhiveframework.whitelist()
def add_contract_annual_raise(self): def add_contract_annual_raise(self):
self.contract_annual_raise = [] self.contract_annual_raise = []
start_date = datetime.datetime.strptime(self.rent_start_date, "%Y-%m-%d") start_date = datetime.datetime.strptime(self.rent_start_date, "%Y-%m-%d")
@@ -95,7 +95,7 @@ class PropertyContract(Document):
'amount': 0, 'amount': 0,
}) })


@frappe.whitelist()
@xhiveframework.whitelist()
def add_payment(self): def add_payment(self):


self.payments = [] self.payments = []
@@ -321,15 +321,15 @@ class PropertyContract(Document):
self.save() self.save()


def on_cancel(self): def on_cancel(self):
frappe.db.set_value("Unit", self.unit, "status", "Vacant")
xhiveframework.db.set_value("Unit", self.unit, "status", "Vacant")


@frappe.whitelist()
@xhiveframework.whitelist()
def create_row_invoice(self, rowid): def create_row_invoice(self, rowid):
create_sales_invoice(self.name, rowid) create_sales_invoice(self.name, rowid)


def get_brand_names(self): def get_brand_names(self):
list_items = [] list_items = []
brands = frappe.get_all("Tenant Brand Name", filters={"parent": self.renter}, fields=['tenant_brand_name'],
brands = xhiveframework.get_all("Tenant Brand Name", filters={"parent": self.renter}, fields=['tenant_brand_name'],
order_by="tenant_brand_name") order_by="tenant_brand_name")
if brands: if brands:
for item in brands: for item in brands:
@@ -337,14 +337,14 @@ class PropertyContract(Document):


return list_items return list_items


@frappe.whitelist()
@xhiveframework.whitelist()
def update_duration(self): def update_duration(self):
duration = self.get_dates_diff(self.rent_start_date, self.rent_end_date) duration = self.get_dates_diff(self.rent_start_date, self.rent_end_date)
# frappe.msgprint(str(duration))
# xhiveframework.msgprint(str(duration))


duration_months = (cint(duration["years"]) * 12) + cint(duration["months"]) + ( duration_months = (cint(duration["years"]) * 12) + cint(duration["months"]) + (
1 if cint(duration["days"]) > 0 or getdate(self.rent_end_date).day == 1 else 0) 1 if cint(duration["days"]) > 0 or getdate(self.rent_end_date).day == 1 else 0)
# frappe.msgprint(str(duration_months))
# xhiveframework.msgprint(str(duration_months))
self.duration = duration_months self.duration = duration_months


return duration_months return duration_months
@@ -367,15 +367,15 @@ def create_sales_invoice(docname="", rowid=""):
print("Starting Creation..........") print("Starting Creation..........")
condiction = "" condiction = ""
if docname and rowid: if docname and rowid:
row_doc = frappe.get_doc("Contract Payments", rowid)
row_doc = xhiveframework.get_doc("Contract Payments", rowid)
#condiction = " and P.`name` = '%s' " % docname #condiction = " and P.`name` = '%s' " % docname
condiction += " and C.`name` = '%s' " % rowid condiction += " and C.`name` = '%s' " % rowid
condiction += " and C.date = '%s' " % row_doc.date condiction += " and C.date = '%s' " % row_doc.date
invoices = frappe.db.sql("""
invoices = xhiveframework.db.sql("""
select *,P.`name` contract_name,C.date invoice_date select *,P.`name` contract_name,C.date invoice_date
from `tabProperty Contract` P from `tabProperty Contract` P
inner JOIN inner JOIN
`tabContract Payments` C
`tabContract Payments` C
on P.`name` = C.parent on P.`name` = C.parent
-- and CURRENT_DATE() >= C.date -- and CURRENT_DATE() >= C.date
and P.rent_item is not NULL and P.rent_item is not NULL
@@ -395,26 +395,26 @@ def create_sales_invoice(docname="", rowid=""):




def create_sales_invoices(args): def create_sales_invoices(args):
# frappe.throw(str(args))
default_company = frappe.db.get_default("Company")
si = frappe.new_doc("Sales Invoice")
args = frappe._dict(args)
# xhiveframework.throw(str(args))
default_company = xhiveframework.db.get_default("Company")
si = xhiveframework.new_doc("Sales Invoice")
args = xhiveframework._dict(args)
si.posting_date = args.date or nowdate() si.posting_date = args.date or nowdate()


invoice_date = args.date or nowdate() invoice_date = args.date or nowdate()


debit_to = frappe.db.get_value("Company", default_company, 'default_receivable_account')
debit_to = xhiveframework.db.get_value("Company", default_company, 'default_receivable_account')
if debit_to: if debit_to:
si.debit_to = debit_to # Default Receivable Account si.debit_to = debit_to # Default Receivable Account
else: else:
frappe.throw(_("Please set Default Receivable Account in Company " + default_company))
xhiveframework.throw(_("Please set Default Receivable Account in Company " + default_company))


si.set_posting_time = 1 si.set_posting_time = 1
si.postint_date = args.invoice_date si.postint_date = args.invoice_date
si.due_date = args.invoice_date si.due_date = args.invoice_date


si.customer = args.renter si.customer = args.renter
si.tax_id = frappe.db.get_value("Customer", args.renter, "tax_id")
si.tax_id = xhiveframework.db.get_value("Customer", args.renter, "tax_id")
si.debit_to = debit_to si.debit_to = debit_to


print(str(si.postint_date) + "=================================================" + str(si.due_date)) print(str(si.postint_date) + "=================================================" + str(si.due_date))
@@ -423,7 +423,7 @@ def create_sales_invoices(args):
si.property = args.property_name si.property = args.property_name
si.unit = args.unit si.unit = args.unit
si.property_contract = args.contract_name si.property_contract = args.contract_name
invoice_curerncy = frappe.get_cached_value('Customer', args.renter, "default_currency") or frappe.get_cached_value(
invoice_curerncy = xhiveframework.get_cached_value('Customer', args.renter, "default_currency") or xhiveframework.get_cached_value(
'Company', default_company, "default_currency") 'Company', default_company, "default_currency")
si.currency = invoice_curerncy si.currency = invoice_curerncy
conversion_rate = 1 conversion_rate = 1
@@ -431,25 +431,25 @@ def create_sales_invoices(args):
conversion_rate = get_conversion_rate(invoice_curerncy,invoice_date) conversion_rate = get_conversion_rate(invoice_curerncy,invoice_date)
if conversion_rate == 0: if conversion_rate == 0:
message = _("Please Insert Currency Exchange for day {0}".format(invoice_date)) message = _("Please Insert Currency Exchange for day {0}".format(invoice_date))
frappe.throw(frappe.bold(message))
xhiveframework.throw(xhiveframework.bold(message))


si.conversion_rate = conversion_rate si.conversion_rate = conversion_rate


default_income_account = None default_income_account = None
item_income_account = frappe.db.get_value("Item Default", {
item_income_account = xhiveframework.db.get_value("Item Default", {
"parent": (args.rent_item if args.reason == "Rent" else args.service_item)}, 'income_account') "parent": (args.rent_item if args.reason == "Rent" else args.service_item)}, 'income_account')
company_default_income_account = frappe.db.get_value("Company", default_company, 'default_income_account')
company_default_income_account = xhiveframework.db.get_value("Company", default_company, 'default_income_account')


if item_income_account: if item_income_account:
default_income_account = item_income_account default_income_account = item_income_account
elif company_default_income_account: elif company_default_income_account:
default_income_account = company_default_income_account default_income_account = company_default_income_account
else: else:
frappe.throw(_("Please set Default Income Account in Company " + default_company))
xhiveframework.throw(_("Please set Default Income Account in Company " + default_company))


cost_center = frappe.db.get_value("Company", default_company, 'cost_center')
cost_center = xhiveframework.db.get_value("Company", default_company, 'cost_center')
if not cost_center: if not cost_center:
frappe.throw(_("Please set Default Cost Center in Company " + default_company))
xhiveframework.throw(_("Please set Default Cost Center in Company " + default_company))


si.append("items", { si.append("items", {
"item_code": (args.rent_item if args.reason == "Rent" else args.service_item), "item_code": (args.rent_item if args.reason == "Rent" else args.service_item),
@@ -471,17 +471,17 @@ def create_sales_invoices(args):
tax_template_name = args.rent_sales_taxes_and_charges_template tax_template_name = args.rent_sales_taxes_and_charges_template


if tax_template_name: if tax_template_name:
tax_data = frappe.db.sql("""
tax_data = xhiveframework.db.sql("""
select T.`name` taxes_and_charges,S.charge_type,S.description,S.rate,S.account_head select T.`name` taxes_and_charges,S.charge_type,S.description,S.rate,S.account_head
from `tabSales Taxes and Charges Template` T from `tabSales Taxes and Charges Template` T
INNER JOIN
INNER JOIN
`tabSales Taxes and Charges` S `tabSales Taxes and Charges` S
on T.`name` = S.parent on T.`name` = S.parent
and S.parenttype='Sales Taxes and Charges Template' and S.parenttype='Sales Taxes and Charges Template'
and T.`name`='{tax_template_name}' and T.`name`='{tax_template_name}'
""".format(tax_template_name=tax_template_name), as_dict=True, debug=False) """.format(tax_template_name=tax_template_name), as_dict=True, debug=False)


# frappe.throw(str(args.service_sales_taxes_and_charges_template))
# xhiveframework.throw(str(args.service_sales_taxes_and_charges_template))
if tax_data: if tax_data:
tax_data = tax_data[0] tax_data = tax_data[0]
si.taxes_and_charges = tax_data["taxes_and_charges"] si.taxes_and_charges = tax_data["taxes_and_charges"]
@@ -499,24 +499,24 @@ def create_sales_invoices(args):
Sinv_ID = None Sinv_ID = None
try: try:
Sinv_ID = si.insert(ignore_mandatory=True) Sinv_ID = si.insert(ignore_mandatory=True)
frappe.db.sql("""update `tabContract Payments` set invoice = '{0}' where `name` = '{1}' """.format(Sinv_ID.name,
xhiveframework.db.sql("""update `tabContract Payments` set invoice = '{0}' where `name` = '{1}' """.format(Sinv_ID.name,
args.name), args.name),
debug=True) debug=True)
return Sinv_ID return Sinv_ID
except Exception as e: except Exception as e:
print("Error......" + str(e)) print("Error......" + str(e))
frappe.throw(_(e))
xhiveframework.throw(_(e))




def get_conversion_rate(invoice_curerncy,invoice_date): def get_conversion_rate(invoice_curerncy,invoice_date):
conversion_rate = 0 conversion_rate = 0
exchange_rate = frappe.db.sql("""
select exchange_rate
from `tabCurrency Exchange`
where from_currency ='{invoice_curerncy}'
and to_currency='EGP'
exchange_rate = xhiveframework.db.sql("""
select exchange_rate
from `tabCurrency Exchange`
where from_currency ='{invoice_curerncy}'
and to_currency='EGP'
-- and date ='{invoice_date}' -- and date ='{invoice_date}'
ORDER BY date desc
ORDER BY date desc
limit 1 limit 1
""".format(invoice_curerncy=invoice_curerncy,invoice_date=invoice_date),as_dict=True) """.format(invoice_curerncy=invoice_curerncy,invoice_date=invoice_date),as_dict=True)
if exchange_rate: if exchange_rate:
@@ -526,20 +526,20 @@ def get_conversion_rate(invoice_curerncy,invoice_date):




def update_unit_status(): def update_unit_status():
units = frappe.db.get_list("Property Contract", filters={"docstatus": 1, "rent_end_date": getdate()},
units = xhiveframework.db.get_list("Property Contract", filters={"docstatus": 1, "rent_end_date": getdate()},
fields=["unit"]) fields=["unit"])
if units: if units:
for unit in units: for unit in units:
frappe.db.set_value("Unit", unit["unit"], "status", "Vacant")
xhiveframework.db.set_value("Unit", unit["unit"], "status", "Vacant")




@frappe.whitelist()
@xhiveframework.whitelist()
def get_brand_names(renter): def get_brand_names(renter):
list_items = [] list_items = []
brands = frappe.get_all("Tenant Brand Name", filters={"parent": renter}, fields=['tenant_brand_name'],
brands = xhiveframework.get_all("Tenant Brand Name", filters={"parent": renter}, fields=['tenant_brand_name'],
order_by="tenant_brand_name") order_by="tenant_brand_name")
if brands: if brands:
for item in brands: for item in brands:
list_items.append(item["tenant_brand_name"]) list_items.append(item["tenant_brand_name"])


return list_items
return list_items

+ 1
- 1
muezzin/property_management/doctype/property_contract/test_property_contract.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestPropertyContract(unittest.TestCase): class TestPropertyContract(unittest.TestCase):


+ 1
- 1
muezzin/property_management/doctype/property_type/property_type.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Property Type', {
xhiveframework.ui.form.on('Property Type', {
// refresh: function(frm) { // refresh: function(frm) {


// } // }


+ 2
- 2
muezzin/property_management/doctype/property_type/property_type.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class PropertyType(Document): class PropertyType(Document):
pass pass

+ 1
- 1
muezzin/property_management/doctype/property_type/test_property_type.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestPropertyType(unittest.TestCase): class TestPropertyType(unittest.TestCase):


+ 2
- 2
muezzin/property_management/doctype/property_unit_detail/property_unit_detail.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class PropertyUnitDetail(Document): class PropertyUnitDetail(Document):
pass pass

+ 1
- 1
muezzin/property_management/doctype/real_estate_offer/real_estate_offer.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Real Estate Offer', {
xhiveframework.ui.form.on('Real Estate Offer', {
// refresh: function(frm) { // refresh: function(frm) {


// } // }


+ 2
- 2
muezzin/property_management/doctype/real_estate_offer/real_estate_offer.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class RealEstateOffer(Document): class RealEstateOffer(Document):
pass pass

+ 1
- 1
muezzin/property_management/doctype/real_estate_offer/test_real_estate_offer.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestRealEstateOffer(unittest.TestCase): class TestRealEstateOffer(unittest.TestCase):


+ 1
- 1
muezzin/property_management/doctype/real_estate_order/real_estate_order.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Real Estate Order', {
xhiveframework.ui.form.on('Real Estate Order', {
// refresh: function(frm) { // refresh: function(frm) {


// } // }


+ 2
- 2
muezzin/property_management/doctype/real_estate_order/real_estate_order.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class RealEstateOrder(Document): class RealEstateOrder(Document):
pass pass

+ 1
- 1
muezzin/property_management/doctype/real_estate_order/test_real_estate_order.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestRealEstateOrder(unittest.TestCase): class TestRealEstateOrder(unittest.TestCase):


+ 2
- 2
muezzin/property_management/doctype/reservation_repayment_schedule/reservation_repayment_schedule.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class ReservationRepaymentSchedule(Document): class ReservationRepaymentSchedule(Document):
pass pass

+ 5
- 5
muezzin/property_management/doctype/reservations/reservations.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Reservations', {
xhiveframework.ui.form.on('Reservations', {
refresh: function (frm) { refresh: function (frm) {
if (frm.doc.docstatus == 1) { if (frm.doc.docstatus == 1) {
frm.add_custom_button(__("Contract"), () => { frm.add_custom_button(__("Contract"), () => {
@@ -27,12 +27,12 @@ frappe.ui.form.on('Reservations', {
}, },
create_new_contract: function (frm) { create_new_contract: function (frm) {
if (frm.doc.reservation_type == 'Selling') { if (frm.doc.reservation_type == 'Selling') {
frappe.model.open_mapped_doc({
xhiveframework.model.open_mapped_doc({
method: "muezzin.property_management.doctype.reservations.reservations.make_unit_sale_contract", method: "muezzin.property_management.doctype.reservations.reservations.make_unit_sale_contract",
frm: cur_frm frm: cur_frm
}) })
} else { } else {
frappe.model.open_mapped_doc({
xhiveframework.model.open_mapped_doc({
method: "muezzin.property_management.doctype.reservations.reservations.make_property_contract", method: "muezzin.property_management.doctype.reservations.reservations.make_property_contract",
frm: cur_frm frm: cur_frm
}) })
@@ -55,8 +55,8 @@ frappe.ui.form.on('Reservations', {
}, },
customer_primary_address: function (frm) { customer_primary_address: function (frm) {
if (frm.doc.customer_primary_address) { if (frm.doc.customer_primary_address) {
frappe.call({
method: 'frappe.contacts.doctype.address.address.get_address_display',
xhiveframework.call({
method: 'xhiveframework.contacts.doctype.address.address.get_address_display',
args: { args: {
"address_dict": frm.doc.customer_primary_address "address_dict": frm.doc.customer_primary_address
}, },


+ 17
- 17
muezzin/property_management/doctype/reservations/reservations.py Прегледај датотеку

@@ -3,13 +3,13 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
import frappe, math, json
from frappe import _
import erpnext
from frappe.model.document import Document
from frappe.utils import flt, rounded, add_months, nowdate, getdate,get_datetime
from erpnext.controllers.accounts_controller import AccountsController
from frappe.model.mapper import get_mapped_doc
import xhiveframework, math, json
from xhiveframework import _
import xhiveerp
from xhiveframework.model.document import Document
from xhiveframework.utils import flt, rounded, add_months, nowdate, getdate,get_datetime
from xhiveerp.controllers.accounts_controller import AccountsController
from xhiveframework.model.mapper import get_mapped_doc


class Reservations(Document): class Reservations(Document):


@@ -22,12 +22,12 @@ class Reservations(Document):


def on_submit(self): def on_submit(self):
if(get_datetime() < get_datetime(self.reservation_end)): if(get_datetime() < get_datetime(self.reservation_end)):
frappe.db.set_value("Unit", self.unit, "status", "Reserved")
xhiveframework.db.set_value("Unit", self.unit, "status", "Reserved")
else: else:
frappe.db.set_value("Unit", self.unit, "status", "Vacant")
xhiveframework.db.set_value("Unit", self.unit, "status", "Vacant")


def on_cancel(self): def on_cancel(self):
frappe.db.set_value("Unit", self.unit, "status", "Vacant")
xhiveframework.db.set_value("Unit", self.unit, "status", "Vacant")


def set_missing_fields(self): def set_missing_fields(self):
if self.repayment_method == "Repay Over Number of Periods": if self.repayment_method == "Repay Over Number of Periods":
@@ -65,13 +65,13 @@ class Reservations(Document):


def validate_repayment_method(repayment_method, amount, monthly_repayment_amount, repayment_periods): def validate_repayment_method(repayment_method, amount, monthly_repayment_amount, repayment_periods):
if repayment_method == "Repay Over Number of Periods" and not repayment_periods: if repayment_method == "Repay Over Number of Periods" and not repayment_periods:
frappe.throw(_("Please enter Repayment Periods"))
xhiveframework.throw(_("Please enter Repayment Periods"))


if repayment_method == "Repay Fixed Amount per Period": if repayment_method == "Repay Fixed Amount per Period":
if not monthly_repayment_amount: if not monthly_repayment_amount:
frappe.throw(_("Please enter repayment Amount"))
xhiveframework.throw(_("Please enter repayment Amount"))
if monthly_repayment_amount > amount: if monthly_repayment_amount > amount:
frappe.throw(_("Monthly Repayment Amount cannot be greater than Amount"))
xhiveframework.throw(_("Monthly Repayment Amount cannot be greater than Amount"))


def get_monthly_repayment_amount(repayment_method, amount, rate_of_interest, repayment_periods,advance_payment): def get_monthly_repayment_amount(repayment_method, amount, rate_of_interest, repayment_periods,advance_payment):
if rate_of_interest: if rate_of_interest:
@@ -81,12 +81,12 @@ def get_monthly_repayment_amount(repayment_method, amount, rate_of_interest, rep
/ ((1 + monthly_interest_rate)**repayment_periods - 1)) / ((1 + monthly_interest_rate)**repayment_periods - 1))
else: else:
monthly_repayment_amount = math.ceil(flt((amount-advance_payment)) / repayment_periods) monthly_repayment_amount = math.ceil(flt((amount-advance_payment)) / repayment_periods)
# frappe.msgprint(str(repayment_periods))
# xhiveframework.msgprint(str(repayment_periods))
return monthly_repayment_amount return monthly_repayment_amount






@frappe.whitelist()
@xhiveframework.whitelist()
def make_unit_sale_contract(source_name, target_doc=None): def make_unit_sale_contract(source_name, target_doc=None):
doclist = get_mapped_doc("Reservations", source_name, { doclist = get_mapped_doc("Reservations", source_name, {
"Reservations": { "Reservations": {
@@ -107,7 +107,7 @@ def make_unit_sale_contract(source_name, target_doc=None):
return doclist return doclist




@frappe.whitelist()
@xhiveframework.whitelist()
def make_property_contract(source_name, target_doc=None): def make_property_contract(source_name, target_doc=None):
doclist = get_mapped_doc("Reservations", source_name, { doclist = get_mapped_doc("Reservations", source_name, {
"Reservations": { "Reservations": {
@@ -125,4 +125,4 @@ def make_property_contract(source_name, target_doc=None):
} }
}, target_doc) }, target_doc)


return doclist
return doclist

+ 1
- 1
muezzin/property_management/doctype/reservations/test_reservations.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestReservations(unittest.TestCase): class TestReservations(unittest.TestCase):


+ 1
- 1
muezzin/property_management/doctype/script/script.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Script', {
xhiveframework.ui.form.on('Script', {
// refresh: function(frm) { // refresh: function(frm) {


// } // }


+ 2
- 2
muezzin/property_management/doctype/script/script.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class Script(Document): class Script(Document):
pass pass

+ 1
- 1
muezzin/property_management/doctype/script/test_script.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestScript(unittest.TestCase): class TestScript(unittest.TestCase):


+ 1
- 1
muezzin/property_management/doctype/tenant_brand_name/tenant_brand_name.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Tenant Brand Name', {
xhiveframework.ui.form.on('Tenant Brand Name', {
// refresh: function(frm) { // refresh: function(frm) {


// } // }


+ 2
- 2
muezzin/property_management/doctype/tenant_brand_name/tenant_brand_name.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class TenantBrandName(Document): class TenantBrandName(Document):
pass pass

+ 1
- 1
muezzin/property_management/doctype/tenant_brand_name/test_tenant_brand_name.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestTenantBrandName(unittest.TestCase): class TestTenantBrandName(unittest.TestCase):


+ 1
- 1
muezzin/property_management/doctype/unit/test_unit.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestUnit(unittest.TestCase): class TestUnit(unittest.TestCase):


+ 21
- 21
muezzin/property_management/doctype/unit/unit.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Unit', {
xhiveframework.ui.form.on('Unit', {
onload(frm) { onload(frm) {
frm.set_query("sub_activity", () => { frm.set_query("sub_activity", () => {
return { return {
@@ -30,7 +30,7 @@ frappe.ui.form.on('Unit', {
frm.doc.unit_price = null; frm.doc.unit_price = null;
frm.doc.gla = null; frm.doc.gla = null;
frm.refresh_field('gla'); frm.refresh_field('gla');
frappe.msgprint('Unit Area must be greater than zero.')
xhiveframework.msgprint('Unit Area must be greater than zero.')
} else if (frm.doc.gla && frm.doc.price_psm) { } else if (frm.doc.gla && frm.doc.price_psm) {
frm.doc.unit_price = frm.doc.gla * frm.doc.price_psm; frm.doc.unit_price = frm.doc.gla * frm.doc.price_psm;
} }
@@ -42,7 +42,7 @@ frappe.ui.form.on('Unit', {
frm.doc.price_psm = null; frm.doc.price_psm = null;
frm.doc.unit_price = null; frm.doc.unit_price = null;
frm.refresh_field('price_psm'); frm.refresh_field('price_psm');
frappe.msgprint('Price must be greater than zero.')
xhiveframework.msgprint('Price must be greater than zero.')
} else if (frm.doc.gla && frm.doc.price_psm) { } else if (frm.doc.gla && frm.doc.price_psm) {
frm.doc.unit_price = frm.doc.gla * frm.doc.price_psm; frm.doc.unit_price = frm.doc.gla * frm.doc.price_psm;
} }
@@ -53,8 +53,8 @@ frappe.ui.form.on('Unit', {
const create_custom_buttons = function(frm) { const create_custom_buttons = function(frm) {
frm.add_custom_button(__('Journal Entry'), () => { frm.add_custom_button(__('Journal Entry'), () => {
let doc = frm.doc let doc = frm.doc
frappe.run_serially([
() => frappe.new_doc('Journal Entry'),
xhiveframework.run_serially([
() => xhiveframework.new_doc('Journal Entry'),
() => { () => {
cur_frm.doc.cost_center = doc.cost_center; cur_frm.doc.cost_center = doc.cost_center;
cur_frm.doc.property = doc.property; cur_frm.doc.property = doc.property;
@@ -68,14 +68,14 @@ const create_custom_buttons = function(frm) {


// frm.add_custom_button(__('Sales Invoice'), () => { // frm.add_custom_button(__('Sales Invoice'), () => {
// let doc = frm.doc // let doc = frm.doc
// frappe.run_serially([
// () => frappe.new_doc('Sales Invoice'),
// xhiveframework.run_serially([
// () => xhiveframework.new_doc('Sales Invoice'),
// () => { // () => {
// cur_frm.doc.cost_center = doc.cost_center; // cur_frm.doc.cost_center = doc.cost_center;
// cur_frm.doc.property = doc.property; // cur_frm.doc.property = doc.property;
// cur_frm.doc.unit = doc.name; // cur_frm.doc.unit = doc.name;
// let customer = doc.property_owner_customer; // let customer = doc.property_owner_customer;
// frappe.model.set_value(cur_frm.doc.doctype, cur_frm.doc.name, "customer", customer);
// xhiveframework.model.set_value(cur_frm.doc.doctype, cur_frm.doc.name, "customer", customer);
// cur_frm.refresh(); // cur_frm.refresh();
// } // }
// ]); // ]);
@@ -83,40 +83,40 @@ const create_custom_buttons = function(frm) {


frm.add_custom_button(__('Payment Entry'), () => { frm.add_custom_button(__('Payment Entry'), () => {
let doc = frm.doc let doc = frm.doc
frappe.run_serially([
() => frappe.new_doc('Payment Entry'),
xhiveframework.run_serially([
() => xhiveframework.new_doc('Payment Entry'),
() => { () => {
cur_frm.doc.cost_center = doc.cost_center; cur_frm.doc.cost_center = doc.cost_center;
cur_frm.doc.property = doc.property; cur_frm.doc.property = doc.property;
cur_frm.doc.unit = doc.name; cur_frm.doc.unit = doc.name;
if (doc.property_owner_customer) { if (doc.property_owner_customer) {
cur_frm.doc.party_type = 'Customer'; cur_frm.doc.party_type = 'Customer';
let party = doc.property_owner_customer; let party = doc.property_owner_customer;
frappe.model.set_value("Payment Entry", cur_frm.doc.name, "party", party)
xhiveframework.model.set_value("Payment Entry", cur_frm.doc.name, "party", party)
} }


if (doc.property_owner_supplier) { if (doc.property_owner_supplier) {
cur_frm.doc.party_type = 'Supplier'; cur_frm.doc.party_type = 'Supplier';
let party = doc.property_owner_supplier; let party = doc.property_owner_supplier;
frappe.model.set_value("Payment Entry", cur_frm.doc.name, "party", party)
xhiveframework.model.set_value("Payment Entry", cur_frm.doc.name, "party", party)
} }
cur_frm.refresh(); cur_frm.refresh();
} }
]); ]);
}, __('Create')); }, __('Create'));


frm.add_custom_button(__('Purchase Invoice'), () => { frm.add_custom_button(__('Purchase Invoice'), () => {
let doc = frm.doc let doc = frm.doc
frappe.run_serially([
() => frappe.new_doc('Purchase Invoice'),
xhiveframework.run_serially([
() => xhiveframework.new_doc('Purchase Invoice'),
() => { () => {
cur_frm.doc.cost_center = doc.cost_center; cur_frm.doc.cost_center = doc.cost_center;
cur_frm.doc.property = doc.property; cur_frm.doc.property = doc.property;
cur_frm.doc.unit = doc.name; cur_frm.doc.unit = doc.name;
let supplier = doc.property_owner_supplier; let supplier = doc.property_owner_supplier;
frappe.model.set_value(cur_frm.doc.doctype, cur_frm.doc.name, "supplier", supplier);
xhiveframework.model.set_value(cur_frm.doc.doctype, cur_frm.doc.name, "supplier", supplier);
cur_frm.refresh(); cur_frm.refresh();
} }
]); ]);
@@ -124,8 +124,8 @@ const create_custom_buttons = function(frm) {


frm.add_custom_button(__('Contract'), () => { frm.add_custom_button(__('Contract'), () => {
let doc = frm.doc let doc = frm.doc
frappe.run_serially([
() => frappe.new_doc('Property Contract'),
xhiveframework.run_serially([
() => xhiveframework.new_doc('Property Contract'),
() => { () => {
cur_frm.doc.property_name = doc.property; cur_frm.doc.property_name = doc.property;
cur_frm.doc.unit_name = doc.name; cur_frm.doc.unit_name = doc.name;
@@ -143,8 +143,8 @@ const update_gla = function(frm) {




var make_sales_invoice = function () { var make_sales_invoice = function () {
frappe.model.open_mapped_doc({
xhiveframework.model.open_mapped_doc({
method: "muezzin.property_management.doctype.unit.unit.make_sales_invoice", method: "muezzin.property_management.doctype.unit.unit.make_sales_invoice",
frm: cur_frm frm: cur_frm
}); });
}
}

+ 5
- 5
muezzin/property_management/doctype/unit/unit.py Прегледај датотеку

@@ -3,17 +3,17 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
import frappe
from frappe.model.document import Document
import xhiveframework
from xhiveframework.model.document import Document


class Unit(Document): class Unit(Document):
pass pass






@frappe.whitelist()
@xhiveframework.whitelist()
def make_sales_invoice(source_name, target_doc=None): def make_sales_invoice(source_name, target_doc=None):
from frappe.model.mapper import get_mapped_doc
from xhiveframework.model.mapper import get_mapped_doc


doclist = get_mapped_doc("Unit", source_name, { doclist = get_mapped_doc("Unit", source_name, {
"Unit": { "Unit": {
@@ -24,4 +24,4 @@ def make_sales_invoice(source_name, target_doc=None):
} }
}, target_doc) }, target_doc)


return doclist
return doclist

+ 1
- 1
muezzin/property_management/doctype/unit/unit_dashboard.py Прегледај датотеку

@@ -1,5 +1,5 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from frappe import _
from xhiveframework import _


def get_data(): def get_data():
return { return {


+ 1
- 1
muezzin/property_management/doctype/unit_activity/test_unit_activity.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestUnitActivity(unittest.TestCase): class TestUnitActivity(unittest.TestCase):


+ 1
- 1
muezzin/property_management/doctype/unit_activity/unit_activity.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Unit Activity', {
xhiveframework.ui.form.on('Unit Activity', {
// refresh: function(frm) { // refresh: function(frm) {


// } // }


+ 2
- 2
muezzin/property_management/doctype/unit_activity/unit_activity.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class UnitActivity(Document): class UnitActivity(Document):
pass pass

+ 1
- 1
muezzin/property_management/doctype/unit_sale_contract/test_unit_sale_contract.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestUnitSaleContract(unittest.TestCase): class TestUnitSaleContract(unittest.TestCase):


+ 3
- 3
muezzin/property_management/doctype/unit_sale_contract/unit_sale_contract.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Unit Sale Contract', {
xhiveframework.ui.form.on('Unit Sale Contract', {
refresh: function (frm) { refresh: function (frm) {
frm.add_custom_button(__("Print Cheque"), () => { frm.add_custom_button(__("Print Cheque"), () => {
frm.events.print_cheques(frm) frm.events.print_cheques(frm)
@@ -14,7 +14,7 @@ frappe.ui.form.on('Unit Sale Contract', {




let show_dialog = function (frm) { let show_dialog = function (frm) {
var d = new frappe.ui.Dialog({
var d = new xhiveframework.ui.Dialog({
title: __('Select Bank'), title: __('Select Bank'),
fields: [ fields: [
{ {
@@ -32,4 +32,4 @@ let show_dialog = function (frm) {
primary_action_label: __('Print Bank Cheque') primary_action_label: __('Print Bank Cheque')
}); });
d.show(); d.show();
}
}

+ 2
- 2
muezzin/property_management/doctype/unit_sale_contract/unit_sale_contract.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class UnitSaleContract(Document): class UnitSaleContract(Document):
pass pass

+ 1
- 1
muezzin/property_management/doctype/unit_type/test_unit_type.py Прегледај датотеку

@@ -3,7 +3,7 @@
# See license.txt # See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals


# import frappe
# import xhiveframework
import unittest import unittest


class TestUnitType(unittest.TestCase): class TestUnitType(unittest.TestCase):


+ 1
- 1
muezzin/property_management/doctype/unit_type/unit_type.js Прегледај датотеку

@@ -1,7 +1,7 @@
// Copyright (c) 2021, Havenir Solutions and contributors // Copyright (c) 2021, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt


frappe.ui.form.on('Unit Type', {
xhiveframework.ui.form.on('Unit Type', {
// refresh: function(frm) { // refresh: function(frm) {


// } // }


+ 2
- 2
muezzin/property_management/doctype/unit_type/unit_type.py Прегледај датотеку

@@ -3,8 +3,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
# import xhiveframework
from xhiveframework.model.document import Document


class UnitType(Document): class UnitType(Document):
pass pass

+ 6
- 6
muezzin/property_management/page/property_dashboard/property_dashboard.js Прегледај датотеку

@@ -1,12 +1,12 @@
frappe.pages["property-dashboard"].on_page_load = function (wrapper) {
frappe.property_dashboard = new PropertyDashboard(wrapper);
xhiveframework.pages["property-dashboard"].on_page_load = function (wrapper) {
xhiveframework.property_dashboard = new PropertyDashboard(wrapper);
}; };


class PropertyDashboard { class PropertyDashboard {
constructor(wrapper) { constructor(wrapper) {
this.page = wrapper.page; this.page = wrapper.page;


frappe.run_serially([
xhiveframework.run_serially([
() => this.make_page(wrapper), () => this.make_page(wrapper),
() => this.make_action_bar(wrapper), () => this.make_action_bar(wrapper),
() => this.make_charts(wrapper), () => this.make_charts(wrapper),
@@ -14,7 +14,7 @@ class PropertyDashboard {
} }


make_page(wrapper) { make_page(wrapper) {
this.page = frappe.ui.make_app_page({
this.page = xhiveframework.ui.make_app_page({
parent: wrapper, parent: wrapper,
title: "Property Dashboard", title: "Property Dashboard",
single_column: true, single_column: true,
@@ -33,14 +33,14 @@ class PropertyDashboard {
const layout = $(wrapper).find(".layout-main-section"); const layout = $(wrapper).find(".layout-main-section");


// server call to get data // server call to get data
frappe.call({
xhiveframework.call({
method: "muezzin.api.property_dashboard.get_tiles_data", method: "muezzin.api.property_dashboard.get_tiles_data",
freeze: true, freeze: true,
callback: (r) => { callback: (r) => {
const data = r.message; const data = r.message;
const context = { tiles: data }; const context = { tiles: data };


const tiles = frappe.render_template("dashboard-tiles", context);
const tiles = xhiveframework.render_template("dashboard-tiles", context);
layout.html(""); layout.html("");
layout.html(tiles); layout.html(tiles);
}, },


+ 4
- 4
muezzin/property_management/report/property_management_revenue/property_management_revenue.js Прегледај датотеку

@@ -2,26 +2,26 @@
// For license information, please see license.txt // For license information, please see license.txt
/* eslint-disable */ /* eslint-disable */


frappe.query_reports["Property Management Revenue"] = {
xhiveframework.query_reports["Property Management Revenue"] = {
"filters": [ "filters": [
{ {
"label": "Company", "label": "Company",
"fieldname": "company", "fieldname": "company",
"fieldtype": "Link", "fieldtype": "Link",
"options": "Company", "options": "Company",
"default": frappe.defaults.get_user_default("Company"),
"default": xhiveframework.defaults.get_user_default("Company"),
}, },
{ {
"label": "From Date", "label": "From Date",
"fieldname": "from_date", "fieldname": "from_date",
"fieldtype": "Date", "fieldtype": "Date",
"default": frappe.datetime.year_start()
"default": xhiveframework.datetime.year_start()
}, },
{ {
"label": "To Date", "label": "To Date",
"fieldname": "to_date", "fieldname": "to_date",
"fieldtype": "Date", "fieldtype": "Date",
"default": frappe.datetime.year_end()
"default": xhiveframework.datetime.year_end()
}, },
{ {
"label": "Status", "label": "Status",


+ 10
- 10
muezzin/property_management/report/property_management_revenue/property_management_revenue.py Прегледај датотеку

@@ -2,12 +2,12 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
import frappe
from frappe import _
import xhiveframework
from xhiveframework import _
from dateutil import relativedelta from dateutil import relativedelta
import datetime import datetime
from dateutil.rrule import rrule, MONTHLY from dateutil.rrule import rrule, MONTHLY
from frappe.utils import date_diff, flt
from xhiveframework.utils import date_diff, flt


def execute(filters=None): def execute(filters=None):
columns = [ columns = [
@@ -273,13 +273,13 @@ def get_data(filters):
else: else:
q_filter = {"docstatus": ["!=", "2"]} q_filter = {"docstatus": ["!=", "2"]}


result = frappe.get_list('Property Contract', q_filter, ['name'])
result = xhiveframework.get_list('Property Contract', q_filter, ['name'])
for row in result: for row in result:
contract = frappe.get_doc('Property Contract', row)
contract = xhiveframework.get_doc('Property Contract', row)
if not contract.unit: if not contract.unit:
continue continue
unit = frappe.get_doc('Unit', contract.unit)
prop = frappe.get_doc('Property', contract.property_name)
unit = xhiveframework.get_doc('Unit', contract.unit)
prop = xhiveframework.get_doc('Property', contract.property_name)


# Calculate Month Left # Calculate Month Left
date1 = datetime.datetime.strptime(str(contract.rent_end_date), '%Y-%m-%d') date1 = datetime.datetime.strptime(str(contract.rent_end_date), '%Y-%m-%d')
@@ -287,7 +287,7 @@ def get_data(filters):
date_diffrance = date_diff(date2, date1) date_diffrance = date_diff(date2, date1)


r = relativedelta.relativedelta(date1, date2) r = relativedelta.relativedelta(date1, date2)
# frappe.msgprint(str(r))
# xhiveframework.msgprint(str(r))
months_left = abs(r.months) months_left = abs(r.months)
years_left = abs(r.years) years_left = abs(r.years)


@@ -369,10 +369,10 @@ def get_data(filters):
fieldname = f'{day}-{month}-{row.year}' fieldname = f'{day}-{month}-{row.year}'


if fieldname in contract_months and contract_months[fieldname]: if fieldname in contract_months and contract_months[fieldname]:
# frappe.msgprint(str(contract_months[fieldname]))
# xhiveframework.msgprint(str(contract_months[fieldname]))
col_data[fieldname] = contract_months[fieldname] col_data[fieldname] = contract_months[fieldname]


# frappe.msgprint(str(col_data))
# xhiveframework.msgprint(str(col_data))
## NOTE ## NOTE
# check if this label exists in dict of payments made above # check if this label exists in dict of payments made above
# if exists then payment for this contract is there so append it in columns # if exists then payment for this contract is there so append it in columns


+ 4
- 4
muezzin/property_management/report/rent_roll/rent_roll.js Прегледај датотеку

@@ -1,26 +1,26 @@
// Copyright (c) 2016, Havenir Solutions and contributors // Copyright (c) 2016, Havenir Solutions and contributors
// For license information, please see license.txt // For license information, please see license.txt
/* eslint-disable */ /* eslint-disable */
frappe.query_reports["Rent Roll"] = {
xhiveframework.query_reports["Rent Roll"] = {
"filters": [ "filters": [
{ {
"label": "Company", "label": "Company",
"fieldname": "company", "fieldname": "company",
"fieldtype": "Link", "fieldtype": "Link",
"options": "Company", "options": "Company",
"default": frappe.defaults.get_user_default("Company"),
"default": xhiveframework.defaults.get_user_default("Company"),
}, },
{ {
"label": "From Date", "label": "From Date",
"fieldname": "from_date", "fieldname": "from_date",
"fieldtype": "Date", "fieldtype": "Date",
"default": frappe.datetime.year_start()
"default": xhiveframework.datetime.year_start()
}, },
{ {
"label": "To Date", "label": "To Date",
"fieldname": "to_date", "fieldname": "to_date",
"fieldtype": "Date", "fieldtype": "Date",
"default": frappe.datetime.year_end()
"default": xhiveframework.datetime.year_end()
}, },
{ {
"label": "Status", "label": "Status",


+ 14
- 14
muezzin/property_management/report/rent_roll/rent_roll.py Прегледај датотеку

@@ -2,8 +2,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
import frappe
from frappe import _
import xhiveframework
from xhiveframework import _
from dateutil import relativedelta from dateutil import relativedelta
import datetime import datetime
import dateutil import dateutil
@@ -11,7 +11,7 @@ import calendar
from calendar import weekday, monthrange from calendar import weekday, monthrange
from collections import Counter from collections import Counter
from dateutil.rrule import rrule, MONTHLY, YEARLY from dateutil.rrule import rrule, MONTHLY, YEARLY
from frappe.utils import date_diff, flt
from xhiveframework.utils import date_diff, flt




def execute(filters=None): def execute(filters=None):
@@ -232,7 +232,7 @@ def execute(filters=None):


start_date = datetime.datetime.strptime(str(filters.from_date), "%Y-%m-%d") start_date = datetime.datetime.strptime(str(filters.from_date), "%Y-%m-%d")
end_date = datetime.datetime.strptime(str(filters.to_date), "%Y-%m-%d") end_date = datetime.datetime.strptime(str(filters.to_date), "%Y-%m-%d")
# date_diffrance = date_diff(start_date, end_date) # date_diffrance = date_diff(start_date, end_date)
# if date_diffrance < 0: # if date_diffrance < 0:
# end_date += relativedelta.relativedelta(days= abs(date_diffrance)) # end_date += relativedelta.relativedelta(days= abs(date_diffrance))
@@ -243,7 +243,7 @@ def execute(filters=None):


month = '{:02d}'.format(row.month) month = '{:02d}'.format(row.month)
day = '{:02d}'.format(row.day) day = '{:02d}'.format(row.day)
label = f'{day}-{month_name}-{row.year}' label = f'{day}-{month_name}-{row.year}'
fieldname = f'{day}-{month}-{row.year}' fieldname = f'{day}-{month}-{row.year}'
columns.append( columns.append(
@@ -266,13 +266,13 @@ def get_data(filters):
else: else:
q_filter = { "docstatus" : ["!=","2"]} q_filter = { "docstatus" : ["!=","2"]}


result = frappe.get_list('Property Contract', q_filter, ['name'])
result = xhiveframework.get_list('Property Contract', q_filter, ['name'])
for row in result: for row in result:
contract = frappe.get_doc('Property Contract', row)
contract = xhiveframework.get_doc('Property Contract', row)
if not contract.unit: if not contract.unit:
continue continue
unit = frappe.get_doc('Unit', contract.unit)
prop = frappe.get_doc('Property', contract.property_name)
unit = xhiveframework.get_doc('Unit', contract.unit)
prop = xhiveframework.get_doc('Property', contract.property_name)


# Calculate Month Left # Calculate Month Left
date1 = datetime.datetime.strptime(str(contract.rent_end_date), '%Y-%m-%d') date1 = datetime.datetime.strptime(str(contract.rent_end_date), '%Y-%m-%d')
@@ -280,14 +280,14 @@ def get_data(filters):
date_diffrance = date_diff(date2, date1) date_diffrance = date_diff(date2, date1)


r = relativedelta.relativedelta(date1, date2) r = relativedelta.relativedelta(date1, date2)
# frappe.msgprint(str(r))
# xhiveframework.msgprint(str(r))
months_left = abs(r.months) months_left = abs(r.months)
years_left = abs(r.years) years_left = abs(r.years)


if date_diffrance > 0: if date_diffrance > 0:
months_left = 0 months_left = 0
years_left = 0 years_left = 0
col_data = { col_data = {
'location': prop.property_location, 'location': prop.property_location,
'brand_name': contract.brand_name, 'brand_name': contract.brand_name,
@@ -363,15 +363,15 @@ def get_data(filters):


if fieldname in contract_months and contract_months[fieldname]: if fieldname in contract_months and contract_months[fieldname]:


#frappe.msgprint(str(contract_months[fieldname]))
#xhiveframework.msgprint(str(contract_months[fieldname]))
col_data[fieldname] = contract_months[fieldname] col_data[fieldname] = contract_months[fieldname]


# frappe.msgprint(str(col_data))
# xhiveframework.msgprint(str(col_data))
## NOTE ## NOTE
# check if this label exists in dict of payments made above # check if this label exists in dict of payments made above
# if exists then payment for this contract is there so append it in columns # if exists then payment for this contract is there so append it in columns
# all that's left is correct syntax to append in columns where date is same as column label # all that's left is correct syntax to append in columns where date is same as column label
# And calculation of yearly payment if required # And calculation of yearly payment if required
data.append(col_data) data.append(col_data)
return data return data

+ 4
- 4
muezzin/property_management/report/service_charge_roll/service_charge_roll.js Прегледај датотеку

@@ -2,26 +2,26 @@
// For license information, please see license.txt // For license information, please see license.txt
/* eslint-disable */ /* eslint-disable */


frappe.query_reports["Service Charge Roll"] = {
xhiveframework.query_reports["Service Charge Roll"] = {
"filters": [ "filters": [
{ {
"label": "Company", "label": "Company",
"fieldname": "company", "fieldname": "company",
"fieldtype": "Link", "fieldtype": "Link",
"options": "Company", "options": "Company",
"default": frappe.defaults.get_user_default("Company"),
"default": xhiveframework.defaults.get_user_default("Company"),
}, },
{ {
"label": "From Date", "label": "From Date",
"fieldname": "from_date", "fieldname": "from_date",
"fieldtype": "Date", "fieldtype": "Date",
"default": frappe.datetime.year_start()
"default": xhiveframework.datetime.year_start()
}, },
{ {
"label": "To Date", "label": "To Date",
"fieldname": "to_date", "fieldname": "to_date",
"fieldtype": "Date", "fieldtype": "Date",
"default": frappe.datetime.year_end()
"default": xhiveframework.datetime.year_end()
}, },
{ {
"label": "Status", "label": "Status",


+ 10
- 10
muezzin/property_management/report/service_charge_roll/service_charge_roll.py Прегледај датотеку

@@ -2,8 +2,8 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
import frappe
from frappe import _
import xhiveframework
from xhiveframework import _
from dateutil import relativedelta from dateutil import relativedelta
import datetime import datetime
import dateutil import dateutil
@@ -11,7 +11,7 @@ import calendar
from calendar import weekday, monthrange from calendar import weekday, monthrange
from collections import Counter from collections import Counter
from dateutil.rrule import rrule, MONTHLY, YEARLY from dateutil.rrule import rrule, MONTHLY, YEARLY
from frappe.utils import date_diff
from xhiveframework.utils import date_diff




def execute(filters=None): def execute(filters=None):
@@ -278,13 +278,13 @@ def get_data(filters):
else: else:
q_filter = { "docstatus" : ["!=","2"]} q_filter = { "docstatus" : ["!=","2"]}


result = frappe.get_list('Property Contract', q_filter, ['name'])
result = xhiveframework.get_list('Property Contract', q_filter, ['name'])
for row in result: for row in result:
contract = frappe.get_doc('Property Contract', row)
contract = xhiveframework.get_doc('Property Contract', row)
if not contract.unit: if not contract.unit:
continue continue
unit = frappe.get_doc('Unit', contract.unit)
prop = frappe.get_doc('Property', contract.property_name)
unit = xhiveframework.get_doc('Unit', contract.unit)
prop = xhiveframework.get_doc('Property', contract.property_name)


# Calculate Month Left # Calculate Month Left
date1 = datetime.datetime.strptime(str(contract.rent_end_date), '%Y-%m-%d') date1 = datetime.datetime.strptime(str(contract.rent_end_date), '%Y-%m-%d')
@@ -292,7 +292,7 @@ def get_data(filters):
date_diffrance = date_diff(date2, date1) date_diffrance = date_diff(date2, date1)


r = relativedelta.relativedelta(date1, date2) r = relativedelta.relativedelta(date1, date2)
# frappe.msgprint(str(r))
# xhiveframework.msgprint(str(r))
months_left = abs(r.months) months_left = abs(r.months)
years_left = abs(r.years) years_left = abs(r.years)


@@ -373,9 +373,9 @@ def get_data(filters):
fieldname = f'{day}-{month}-{row.year}' fieldname = f'{day}-{month}-{row.year}'


if fieldname in contract_months and contract_months[fieldname]: if fieldname in contract_months and contract_months[fieldname]:
# frappe.msgprint(str(contract_months[fieldname]))
# xhiveframework.msgprint(str(contract_months[fieldname]))
col_data[fieldname] = contract_months[fieldname] col_data[fieldname] = contract_months[fieldname]
# frappe.msgprint(str(col_data))
# xhiveframework.msgprint(str(col_data))
## NOTE ## NOTE
# check if this label exists in dict of payments made above # check if this label exists in dict of payments made above
# if exists then payment for this contract is there so append it in columns # if exists then payment for this contract is there so append it in columns


+ 1
- 1
muezzin/property_management/report/sold_unit/sold_unit.js Прегледај датотеку

@@ -2,7 +2,7 @@
// For license information, please see license.txt // For license information, please see license.txt
/* eslint-disable */ /* eslint-disable */


frappe.query_reports["Sold Unit"] = {
xhiveframework.query_reports["Sold Unit"] = {
"filters": [ "filters": [


] ]


+ 31
- 31
muezzin/property_management/report/sold_unit/sold_unit.py Прегледај датотеку

@@ -2,7 +2,7 @@
# For license information, please see license.txt # For license information, please see license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
import frappe
import xhiveframework


def execute(filters=None): def execute(filters=None):
columns = get_columns(filters) columns = get_columns(filters)
@@ -11,111 +11,111 @@ def execute(filters=None):


def get_columns(filters): def get_columns(filters):
columns = [ columns = [
{
{
"label": "Sr", "label": "Sr",
"fieldname": "serial_number", "fieldname": "serial_number",
"fieldtype": "Int", "fieldtype": "Int",
"width": 50 "width": 50
}, },
{
{
"label": "Name", "label": "Name",
"fieldname": "unit", "fieldname": "unit",
"fieldtype": "Link", "fieldtype": "Link",
"options": "Unit", "options": "Unit",
"width": 100 "width": 100
}, },
{
{
"label": "Docstatus", "label": "Docstatus",
"fieldname": "docstatus", "fieldname": "docstatus",
"fieldtype": "Int", "fieldtype": "Int",
"width": 100 "width": 100
}, },
{
{
"label": "Unit Number", "label": "Unit Number",
"fieldname": "unit_number", "fieldname": "unit_number",
"fieldtype": "Data", "fieldtype": "Data",
"width": 100 "width": 100
}, },
{
{
"label": "Role (Floor Number)", "label": "Role (Floor Number)",
"fieldname": "role_floor_number", "fieldname": "role_floor_number",
"fieldtype": "Data", "fieldtype": "Data",
"width": 150 "width": 150
}, },
{
{
"label": "Contract Year", "label": "Contract Year",
"fieldname": "contract_year", "fieldname": "contract_year",
"fieldtype": "Data", "fieldtype": "Data",
"width": 100 "width": 100
}, },
{
{
"label": "Unit Type", "label": "Unit Type",
"fieldname": "unit_type", "fieldname": "unit_type",
"fieldtype": "Link", "fieldtype": "Link",
"options": "Unit Type", "options": "Unit Type",
"width": 100 "width": 100
}, },
{
{
"label": "Property Owner (Customer)", "label": "Property Owner (Customer)",
"fieldname": "property_owner", "fieldname": "property_owner",
"fieldtype": "Data", "fieldtype": "Data",
"width": 200 "width": 200
}, },
{
{
"label": "Unit Area (per Square Meter)", "label": "Unit Area (per Square Meter)",
"fieldname": "unit_area", "fieldname": "unit_area",
"fieldtype": "Int", "fieldtype": "Int",
"width": 200 "width": 200
}, },
{
{
"label": "Price (per Square Meter)", "label": "Price (per Square Meter)",
"fieldname": "price_psm", "fieldname": "price_psm",
"fieldtype": "Data", "fieldtype": "Data",
"width": 200 "width": 200
}, },
{
{
"label": "Unit Price", "label": "Unit Price",
"fieldname": "unit_price", "fieldname": "unit_price",
"fieldtype": "Float", "fieldtype": "Float",
"width": 100 "width": 100
}, },
{
{
"label": "Unit Total Cost", "label": "Unit Total Cost",
"fieldname": "unit_valuation_rate", "fieldname": "unit_valuation_rate",
"fieldtype": "Float", "fieldtype": "Float",
"width": 100 "width": 100
}, },
{
{
"label": "Total Invoiced", "label": "Total Invoiced",
"fieldname": "total_invoiced", "fieldname": "total_invoiced",
"fieldtype": "Float", "fieldtype": "Float",
"width": 100 "width": 100
}, },
{
{
"label": "Total Paid", "label": "Total Paid",
"fieldname": "total_paid", "fieldname": "total_paid",
"fieldtype": "Float", "fieldtype": "Float",
"width": 100 "width": 100
}, },
{
{
"label": "Unit Profit", "label": "Unit Profit",
"fieldname":"unit_profit", "fieldname":"unit_profit",
"fieldtype": "Float", "fieldtype": "Float",
"width": 100 "width": 100
}, },
{
{
"label": "Total Outstanding", "label": "Total Outstanding",
"fieldname": "total_outstanding", "fieldname": "total_outstanding",
"fieldtype": "Float", "fieldtype": "Float",
"width": 150 "width": 150
}, },
] ]
return columns return columns
def build_data(filters): def build_data(filters):
data = [] data = []
sub_filters = {} sub_filters = {}
fields = [ fields = [
"name", "name",
@@ -129,8 +129,8 @@ def build_data(filters):
"unit_price", "unit_price",
"unit_valuation_rate", "unit_valuation_rate",
] ]
units = frappe.get_list("Unit", sub_filters, fields)
units = xhiveframework.get_list("Unit", sub_filters, fields)
i = 1 i = 1
for row in units: for row in units:
sub_filters = { sub_filters = {
@@ -142,20 +142,20 @@ def build_data(filters):
"grand_total", "grand_total",
"outstanding_amount", "outstanding_amount",
] ]
invoiced = 0 invoiced = 0
outstanding = 0 outstanding = 0
paid = 0 paid = 0
invoices = frappe.get_list("Sales Invoice", sub_filters, fields)
invoices = xhiveframework.get_list("Sales Invoice", sub_filters, fields)
for invoice in invoices: for invoice in invoices:
invoiced += invoice.grand_total invoiced += invoice.grand_total
outstanding += invoice.outstanding_amount outstanding += invoice.outstanding_amount
paid = invoiced - outstanding paid = invoiced - outstanding
unit_profit = row.unit_valuation_rate-invoiced unit_profit = row.unit_valuation_rate-invoiced
record = { record = {
"serial_number": i, "serial_number": i,
"unit": row.name, "unit": row.name,
@@ -173,8 +173,8 @@ def build_data(filters):
"unit_profit":unit_profit, "unit_profit":unit_profit,
"total_outstanding": outstanding, "total_outstanding": outstanding,
} }
i = i + 1 i = i + 1
data.append(record) data.append(record)
return data
return data

+ 5
- 5
muezzin/public/js/payment_entry.js Прегледај датотеку

@@ -1,16 +1,16 @@
frappe.ui.form.on("Payment Entry", {
xhiveframework.ui.form.on("Payment Entry", {
onload(frm, dt, dn) { onload(frm, dt, dn) {
if (frm.is_new()) { if (frm.is_new()) {
const item = frm.doc.references[0]; const item = frm.doc.references[0];
let doctype = "Sales Invoice"; let doctype = "Sales Invoice";
let doc_name = item.reference_name; let doc_name = item.reference_name;


frappe.db.get_value(doctype, doc_name, "unit").then((r) => {
frappe.model.set_value(dt, dn, "unit", r.message.unit);
xhiveframework.db.get_value(doctype, doc_name, "unit").then((r) => {
xhiveframework.model.set_value(dt, dn, "unit", r.message.unit);
}); });


frappe.db.get_value(doctype, doc_name, "property").then((r) => {
frappe.model.set_value(dt, dn, "property", r.message.property);
xhiveframework.db.get_value(doctype, doc_name, "property").then((r) => {
xhiveframework.model.set_value(dt, dn, "property", r.message.property);
}); });
} }
}, },


Loading…
Откажи
Сачувај