Fix: Relations were not working as after setting the id, if the object was none, then it set to None again.

eg. in Inventory if product_id was supplied and not the product object, product_id was set, but then when the product was set to None, the product_id was also gone

Version bumped to 7.0.1
This commit is contained in:
Amritanshu Agrawal 2020-06-01 20:40:52 +05:30
parent 58f6d6578b
commit b7a1c5b816
5 changed files with 64 additions and 80 deletions

View File

@ -10,11 +10,10 @@ from sqlalchemy import (
Boolean,
ForeignKey,
func,
DateTime,
PickleType,
Date,
)
from sqlalchemy.orm import relationship
from sqlalchemy.orm import relationship, Session
from brewman.models.guidtype import GUID
from .meta import Base
@ -60,7 +59,7 @@ class Product(Base):
is_active=None,
is_purchased=None,
is_sold=None,
id=None,
id_=None,
is_fixture=False,
):
self.code = code
@ -76,20 +75,17 @@ class Product(Base):
self.is_active = is_active
self.is_purchased = is_purchased
self.is_sold = is_sold
self.id = id
self.id = id_
self.is_fixture = is_fixture
@property
def full_name(self):
return "{0} ({1})".format(self.name, self.units)
def create(self, dbsession):
code = dbsession.query(func.max(Product.code)).one()[0]
if code is None:
self.code = 1
else:
self.code = code + 1
dbsession.add(self)
def create(self, db: Session):
code = db.query(func.max(Product.code)).one()[0]
self.code = 1 if code is None else code + 1
db.add(self)
return self
def can_delete(self, advanced_delete):
@ -148,7 +144,7 @@ class Recipe(Base):
valid_to=None,
notes=None,
effective_from=None,
id=None,
id_=None,
):
self.product_id = product_id
self.quantity = quantity
@ -159,7 +155,7 @@ class Recipe(Base):
self.notes = "" if notes is None else notes
self.effective_from = date.today() if effective_from is None else effective_from
self.effective_to = None
self.id = id
self.id = id_
class RecipeItem(Base):
@ -174,12 +170,12 @@ class RecipeItem(Base):
product = relationship("Product")
def __init__(self, recipe_id=None, product_id=None, quantity=None, price=None, id=None):
def __init__(self, recipe_id=None, product_id=None, quantity=None, price=None, id_=None):
self.recipe_id = recipe_id
self.product_id = product_id
self.quantity = quantity
self.price = price
self.id = id
self.id = id_
class ProductGroup(Base):
@ -191,9 +187,9 @@ class ProductGroup(Base):
products = relationship("Product", backref="product_group")
def __init__(self, name=None, id=None, is_fixture=False):
def __init__(self, name=None, id_=None, is_fixture=False):
self.name = name
self.id = id
self.id = id_
self.is_fixture = is_fixture
@classmethod
@ -219,9 +215,9 @@ class CostCentre(Base):
def __name__(self):
return self.name
def __init__(self, name=None, id=None, is_fixture=False):
def __init__(self, name=None, id_=None, is_fixture=False):
self.name = name
self.id = id
self.id = id_
self.is_fixture = is_fixture
@classmethod
@ -274,22 +270,22 @@ class AccountBase(Base):
self,
code=None,
name=None,
type=None,
type_=None,
is_starred=None,
is_active=None,
is_reconcilable=False,
cost_centre_id=None,
id=None,
id_=None,
is_fixture=False,
):
self.code = code
self.name = name
self.type = type
self.type = type_
self.is_starred = is_starred
self.is_active = is_active
self.is_reconcilable = is_reconcilable
self.cost_centre_id = cost_centre_id
self.id = id
self.id = id_
self.is_fixture = is_fixture
@classmethod
@ -308,21 +304,15 @@ class AccountBase(Base):
query_ = query_.filter(cls.name.ilike("%" + item + "%"))
return query_.order_by(cls.name)
def create(self, dbsession):
code = dbsession.query(func.max(AccountBase.code)).filter(AccountBase.type == self.type).one()[0]
if code is None:
self.code = 1
else:
self.code = code + 1
dbsession.add(self)
def create(self, db: Session):
code = db.query(func.max(AccountBase.code)).filter(AccountBase.type == self.type).one()[0]
self.code = 1 if code is None else code + 1
db.add(self)
return self
def can_delete(self, advanced_delete):
if self.is_fixture:
return (
False,
"{0} is a fixture and cannot be edited or deleted.".format(self.name),
)
return False, f"{self.name} is a fixture and cannot be edited or deleted."
if self.is_active:
return False, "Account is active"
if len(self.journals) > 0 and not advanced_delete:
@ -330,8 +320,8 @@ class AccountBase(Base):
return True, ""
@classmethod
def get_code(cls, type, dbsession):
code = dbsession.query(func.max(AccountBase.code)).filter(AccountBase.type == type).one()[0]
def get_code(cls, type_, db: Session):
code = db.query(func.max(AccountBase.code)).filter(AccountBase.type == type_).one()[0]
return 1 if code is None else code + 1
@classmethod
@ -410,21 +400,18 @@ class Employee(AccountBase):
super().__init__(
code=code,
name=name,
type=10,
type_=10,
is_starred=is_starred,
is_active=is_active,
is_reconcilable=False,
cost_centre_id=cost_centre_id,
)
def create(self, dbsession):
code = dbsession.query(func.max(AccountBase.code)).filter(AccountBase.type == self.type).one()[0]
if code is None:
self.code = 1
else:
self.code = code + 1
self.name += " (" + str(self.code) + ")"
dbsession.add(self)
def create(self, db: Session):
code = db.query(func.max(AccountBase.code)).filter(AccountBase.type == self.type).one()[0]
self.code = 1 if code in None else code + 1
self.name += f" ({str(self.code)})"
db.add(self)
return self
def can_delete(self, advanced_delete):
@ -466,24 +453,18 @@ class AttendanceType:
@classmethod
def by_name(cls, name):
list = cls.list()
for item in list:
if item.name == name:
return item
next(i for i in cls.list() if i.name == name)
@classmethod
def by_id(cls, id):
list = cls.list()
for item in list:
if item.id == id:
return item
def by_id(cls, id_):
next(i for i in cls.list() if i.id == id_)
class AccountType:
def __init__(
self, id, name, balance_sheet=None, debit=None, cash_flow_classification=None, order=None, show_in_list=None,
self, id_, name, balance_sheet=None, debit=None, cash_flow_classification=None, order=None, show_in_list=None,
):
self.id = id
self.id = id_
self.name = name
self.balance_sheet = balance_sheet
self.debit = debit
@ -498,7 +479,7 @@ class AccountType:
@classmethod
def list(cls):
list = [
return [
AccountType(1, "Cash", True, True, "Cash", 10, True),
AccountType(2, "Purchase", False, True, "Operating", 20, True),
AccountType(3, "Sale", False, False, "Operating", 10, True),
@ -515,21 +496,14 @@ class AccountType:
# list.append(AccountType(8, 'Discount', False, False, True, 30, True))
# list.append(AccountType(14, 'Total', False, False, False, 900, False))
# list.append(AccountType(15, 'Net', False, False, False, 1000, False))
return list
@classmethod
def by_name(cls, name):
list = cls.list()
for item in list:
if item.name == name:
return item
next(i for i in cls.list() if i.name == name)
@classmethod
def by_id(cls, id):
list = cls.list()
for item in list:
if item.id == id:
return item
def by_id(cls, id_):
next(i for i in cls.list() if i.id == id_)
class DbSetting(Base):
@ -539,7 +513,7 @@ class DbSetting(Base):
name = Column("name", Unicode(255), unique=True, nullable=False)
data = Column("data", PickleType)
def __init__(self, id=None, name=None, data=None):
self.id = id
def __init__(self, id_=None, name=None, data=None):
self.id = id_
self.name = name
self.data = data

View File

@ -196,14 +196,15 @@ class EmployeeBenefit(Base):
):
self.id = id_
self.voucher_id = voucher_id
self.journal_id = journal_id
self.gross_salary = gross_salary
self.days_worked = days_worked
self.esi_ee = esi_ee
self.pf_ee = pf_ee
self.esi_er = esi_er
self.pf_er = pf_er
if journal_id is None and journal is not None:
if journal is None:
self.journal_id = journal_id
else:
self.journal = journal
@ -224,9 +225,10 @@ class Incentive(Base):
self.voucher_id = voucher_id
if journal is None:
self.journal_id = journal_id
else:
self.journal = journal
self.days_worked = days_worked
self.points = points
self.journal = journal
class Inventory(Base):
@ -260,14 +262,16 @@ class Inventory(Base):
self.voucher_id = voucher_id
if product is None:
self.product_id = product_id
else:
self.product = product
if batch is None:
self.batch_id = batch_id
else:
self.batch = batch
self.quantity = quantity
self.rate = rate
self.tax = tax
self.discount = discount
self.batch = batch
self.product = product
@hybrid_property
def amount(self):
@ -298,7 +302,8 @@ class Batch(Base):
self.discount = discount
if product is None:
self.product_id = product_id
self.product = product
else:
self.product = product
def amount(self):
return self.quantity_remaining * self.rate * (1 + self.tax) * (1 - self.discount)
@ -364,7 +369,7 @@ class Attendance(Base):
if old is None or old.attendance_type != self.attendance_type:
if old is not None:
old.is_valid = False
dbsession.add(self)
db.add(self)
class Fingerprint(Base):
@ -374,8 +379,8 @@ class Fingerprint(Base):
employee_id = Column("employee_id", GUID(), ForeignKey("employees.id"))
date = Column("date", DateTime)
def __init__(self, id=None, employee_id=None, date=None):
self.id = id
def __init__(self, id_=None, employee_id=None, date=None):
self.id = id_
self.employee_id = employee_id
self.date = date
self.fingerprint_type = 0

View File

@ -44,6 +44,7 @@ def rebase(
db.add(voucher_l)
for j in voucher_l.journals:
db.add(j)
db.flush()
db.add(voucher_b)
for j in voucher_b.journals:
db.add(j)
@ -86,6 +87,10 @@ def save_starred(date_: date, db: Session):
for other in others:
if voucher.type != VoucherType.by_name("Opening Accounts").id:
voucher.narration += f"\nSuspense \u20B9{other.amount:,.2f} is {other.account.name}"
if other.employee_benefit:
db.delete(other.employee_benefit)
if other.incentive:
db.delete(other.incentive)
db.delete(other)
voucher.type = VoucherType.by_name("Journal")
if len(voucher.narration) >= 1000:

View File

@ -1,6 +1,6 @@
{
"name": "overlord",
"version": "7.0.0",
"version": "7.0.1",
"scripts": {
"ng": "ng",
"start": "ng serve",

View File

@ -11,7 +11,7 @@ with open(os.path.join(here, 'requirements.txt'), "r") as r:
requires = r.read().splitlines()
setup(name='brewman',
version='7.0',
version='7.0.1',
description='brewman',
long_description=README + '\n\n' + CHANGES,
classifiers=[