brewman/brewman/schemas/reports.py

540 lines
14 KiB
Python
Raw Normal View History

import uuid
from decimal import Decimal
from typing import List, Optional
from datetime import datetime, date
from pydantic import BaseModel, Field, validator
from brewman.schemas import to_camel
2020-05-14 08:08:13 +00:00
from brewman.schemas.master import AccountLink, ProductLink
class LedgerItem(BaseModel):
id_: Optional[uuid.UUID]
date_: date
name: str
url: List[str]
type_: str
narration: str
debit: Decimal = Field(multiple_of=0.01)
credit: Decimal = Field(multiple_of=0.01)
posted: bool
@validator("date_", pre=True)
def parse_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
2020-05-14 10:13:20 +00:00
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
class Ledger(BaseModel):
start_date: date
finish_date: date
account: Optional[AccountLink]
body: List[LedgerItem]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
2020-05-14 10:13:20 +00:00
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
@validator("start_date", pre=True)
def parse_start_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
@validator("finish_date", pre=True)
def parse_finish_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
class BalanceSheetItem(BaseModel):
name: Optional[str]
2020-05-14 10:13:20 +00:00
group: Optional[str]
amount: Optional[Decimal]
sub_amount: Optional[Decimal]
order: int
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
class BalanceSheet(BaseModel):
date_: date
body: List[BalanceSheetItem]
footer: Optional[BalanceSheetItem]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
2020-05-14 10:13:20 +00:00
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
@validator("date_", pre=True)
def parse_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
class CashFlowItem(BaseModel):
name: str
2020-05-14 10:13:20 +00:00
url: Optional[List[str]]
amount: Decimal = Field(multiple_of=0.01)
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
class CashFlowBody(BaseModel):
operating: List[CashFlowItem]
investing: List[CashFlowItem]
financing: List[CashFlowItem]
details: List[CashFlowItem]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
class CashFlow(BaseModel):
start_date: date
finish_date: date
body: CashFlowBody
footer: Optional[List[CashFlowItem]]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
2020-05-14 10:13:20 +00:00
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
@validator("start_date", pre=True)
def parse_start_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
@validator("finish_date", pre=True)
def parse_finish_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 06:48:45 +00:00
class ClosingStockItem(BaseModel):
product: str
2020-05-14 10:13:20 +00:00
group: str
2020-05-14 06:48:45 +00:00
quantity: Decimal
amount: Decimal
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
class ClosingStock(BaseModel):
date_: date
body: List[ClosingStockItem]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
2020-05-14 10:13:20 +00:00
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
2020-05-14 06:48:45 +00:00
@validator("date_", pre=True)
def parse_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 06:48:45 +00:00
2020-05-14 06:57:15 +00:00
class DaybookItem(BaseModel):
id_: Optional[uuid.UUID]
date_: date
url: List[str]
type_: str
narration: str
debit_text: Optional[str]
debit: Optional[Decimal] = Field(multiple_of=0.01)
credit_text: Optional[str]
credit: Optional[Decimal] = Field(multiple_of=0.01)
posted: bool
@validator("date_", pre=True)
def parse_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 06:57:15 +00:00
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
2020-05-14 10:13:20 +00:00
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
2020-05-14 06:57:15 +00:00
class Daybook(BaseModel):
start_date: date
finish_date: date
body: List[DaybookItem]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
2020-05-14 10:13:20 +00:00
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
2020-05-14 06:57:15 +00:00
@validator("start_date", pre=True)
def parse_start_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 06:57:15 +00:00
@validator("finish_date", pre=True)
def parse_finish_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 07:04:27 +00:00
class NetTransactionsItem(BaseModel):
type_: str
name: str
debit: Optional[Decimal] = Field(multiple_of=0.01)
credit: Optional[Decimal] = Field(multiple_of=0.01)
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
2020-05-14 10:13:20 +00:00
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
2020-05-14 07:04:27 +00:00
class NetTransactions(BaseModel):
start_date: date
finish_date: date
body: List[NetTransactionsItem]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
2020-05-14 10:13:20 +00:00
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
2020-05-14 07:04:27 +00:00
@validator("start_date", pre=True)
def parse_start_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 07:04:27 +00:00
@validator("finish_date", pre=True)
def parse_finish_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 08:08:13 +00:00
class ProductLedgerItem(BaseModel):
id_: Optional[uuid.UUID]
date_: date
name: str
url: List[str]
type_: str
narration: str
debit_quantity: Optional[Decimal]
debit_amount: Optional[Decimal]
credit_quantity: Optional[Decimal]
credit_amount: Optional[Decimal]
running_quantity: Decimal
running_amount: Decimal
2020-05-14 08:08:13 +00:00
posted: bool
@validator("date_", pre=True)
def parse_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 08:08:13 +00:00
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
2020-05-14 10:13:20 +00:00
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
2020-05-14 08:08:13 +00:00
class ProductLedger(BaseModel):
start_date: date
finish_date: date
product: Optional[ProductLink]
body: List[ProductLedgerItem]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
2020-05-14 10:13:20 +00:00
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
2020-05-14 08:08:13 +00:00
@validator("start_date", pre=True)
def parse_start_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 08:08:13 +00:00
@validator("finish_date", pre=True)
def parse_finish_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 08:19:40 +00:00
class ProfitLossItem(BaseModel):
group: Optional[str]
name: Optional[str]
amount: Optional[Decimal]
total: Optional[Decimal]
order: int
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
2020-05-14 10:13:20 +00:00
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
2020-05-14 08:19:40 +00:00
class ProfitLoss(BaseModel):
start_date: date
finish_date: date
body: List[ProfitLossItem]
footer: Optional[ProfitLossItem]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
2020-05-14 10:13:20 +00:00
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
2020-05-14 08:19:40 +00:00
@validator("start_date", pre=True)
def parse_start_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 08:19:40 +00:00
@validator("finish_date", pre=True)
def parse_finish_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 09:09:19 +00:00
class PurchaseEntriesItem(BaseModel):
date_: date
url: List[str]
supplier: str
product: str
quantity: Decimal
rate: Decimal
tax: Decimal
discount: Decimal
amount: Decimal
@validator("date_", pre=True)
def parse_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 09:09:19 +00:00
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
class PurchaseEntries(BaseModel):
start_date: date
finish_date: date
body: List[PurchaseEntriesItem]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
2020-05-14 10:13:20 +00:00
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
2020-05-14 09:09:19 +00:00
@validator("start_date", pre=True)
def parse_start_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 09:09:19 +00:00
@validator("finish_date", pre=True)
def parse_finish_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 09:29:16 +00:00
class PurchasesItem(BaseModel):
name: str
quantity: Decimal
rate: Decimal
amount: Decimal
url: List[str]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
class Purchases(BaseModel):
start_date: date
finish_date: date
body: List[PurchasesItem]
footer: Optional[PurchasesItem]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
2020-05-14 10:13:20 +00:00
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
@validator("start_date", pre=True)
def parse_start_date(cls, value):
if isinstance(value, date):
return value
return datetime.strptime(value, "%d-%b-%Y").date()
@validator("finish_date", pre=True)
def parse_finish_date(cls, value):
if isinstance(value, date):
return value
return datetime.strptime(value, "%d-%b-%Y").date()
class RawMaterialCostItem(BaseModel):
name: Optional[str]
issue: Optional[Decimal]
sale: Optional[Decimal]
rmc: Optional[Decimal]
url: Optional[List[str]]
group: Optional[str]
quantity: Optional[Decimal]
net: Optional[Decimal]
gross: Optional[Decimal]
heading: Optional[bool]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
class RawMaterialCost(BaseModel):
id_: Optional[uuid.UUID]
start_date: date
finish_date: date
body: List[RawMaterialCostItem]
footer: Optional[RawMaterialCostItem]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
2020-05-14 09:29:16 +00:00
@validator("start_date", pre=True)
def parse_start_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 09:29:16 +00:00
@validator("finish_date", pre=True)
def parse_finish_date(cls, value):
if isinstance(value, date):
return value
2020-05-14 10:13:20 +00:00
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 10:39:31 +00:00
class StockMovementItem(BaseModel):
id_: uuid.UUID
group: str
name: str
opening: Decimal
purchase: Decimal
issue: Decimal
closing: Decimal
url: List[str]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
class StockMovement(BaseModel):
start_date: date
finish_date: date
body: List[StockMovementItem]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
@validator("start_date", pre=True)
def parse_start_date(cls, value):
if isinstance(value, date):
return value
return datetime.strptime(value, "%d-%b-%Y").date()
@validator("finish_date", pre=True)
def parse_finish_date(cls, value):
if isinstance(value, date):
return value
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 10:54:03 +00:00
class TrialBalanceItem(BaseModel):
type_: Optional[str]
name: Optional[str]
debit: Optional[Decimal]
credit: Optional[Decimal]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
class TrialBalance(BaseModel):
date_: date
body: List[TrialBalanceItem]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
@validator("date_", pre=True)
def parse_date(cls, value):
if isinstance(value, date):
return value
return datetime.strptime(value, "%d-%b-%Y").date()
2020-05-14 11:03:08 +00:00
class Unposted(BaseModel):
id_: uuid.UUID
date_: date
url: List[str]
type_: str
narration: str
debit_name: str
debit_amount: Decimal
credit_name: str
credit_amount: Decimal
@validator("date_", pre=True)
def parse_date(cls, value):
if isinstance(value, date):
return value
return datetime.strptime(value, "%d-%b-%Y").date()
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}