feat(excel):add
This commit is contained in:
@@ -19,6 +19,7 @@ class BaseMonitor(pydantic.BaseModel):
|
||||
1.عالیه
|
||||
2. عالیه وکارگاه
|
||||
3.یکپارچه
|
||||
4.کارگاهی
|
||||
""")
|
||||
date_delivery_land:Optional[datetime.datetime] =Field(description=" تاریخ تحویل زمین")
|
||||
date_building_permit:Optional[datetime.datetime] = Field(description=" تاریخ صدور پروانه ساختمانی")
|
||||
@@ -27,12 +28,12 @@ class BaseMonitor(pydantic.BaseModel):
|
||||
|
||||
class AddTFPercent(pydantic.BaseModel):
|
||||
amount:int = Field(description="مبلغ")
|
||||
percent:int = Field(description="درصد")
|
||||
date:datetime.datetime = Field(description="تاریخ ابلاغ")
|
||||
percent:Optional[int] = Field(description="درصد")
|
||||
date:Optional[datetime.datetime] = Field(description="تاریخ ابلاغ")
|
||||
class Adding(pydantic.BaseModel):
|
||||
row:int = Field(description="ردیف")
|
||||
amount:int = Field(description="مبلغ")
|
||||
date:datetime.datetime = Field(description="تاریخ الحاقیه")
|
||||
amount:Optional[int] = Field(description="مبلغ")
|
||||
date:Optional[datetime.datetime] = Field(description="تاریخ الحاقیه")
|
||||
class DetailMonitor(pydantic.BaseModel):
|
||||
type:Optional[int] = Field(description="""
|
||||
1.فهرست بهایی
|
||||
|
||||
@@ -0,0 +1,143 @@
|
||||
import datetime
|
||||
import uuid
|
||||
|
||||
import pandas as pd
|
||||
import os
|
||||
|
||||
from app.config import TaskEnv
|
||||
from app.models.project import ProjectModel
|
||||
from core.service.mongo_db import use_collection
|
||||
import jdatetime
|
||||
from app.repositories.project import ProjectRepository
|
||||
|
||||
class ExcelRepository():
|
||||
async def addDesignSheet(self):
|
||||
base_dir = os.path.dirname(os.path.abspath(__file__)) # این یعنی مسیر فایل جاری (مثلاً main.py)
|
||||
project_root = os.path.abspath(os.path.join(base_dir, "../..")) # رفتن به ریشه پروژه
|
||||
excel_path = os.path.join(project_root, "projects1.xlsx")
|
||||
print("Excel file path:", excel_path)
|
||||
df = pd.read_excel(excel_path, engine="openpyxl", sheet_name="طراحی", dtype={'code': str,'date_send':str})
|
||||
projects = await use_collection(TaskEnv.CLN_PROJECT).find({}).to_list(None)
|
||||
|
||||
for index, row in df.iterrows():
|
||||
my_row = row.to_dict()
|
||||
print(f"سطر {index}: {row.to_dict()}")
|
||||
print("code",my_row['code'])
|
||||
for p in projects:
|
||||
if str(my_row["code"]) in str(p['design']["code"]) and p['counter'] == int(str(my_row["code"])):
|
||||
print('projects',p)
|
||||
if my_row['letter'] and pd.notna(row['letter']):
|
||||
p['design']["letter"] = my_row["letter"]
|
||||
if my_row['date_send'] and pd.notna(row['date_send']):
|
||||
year = int(my_row['date_send'][:4])
|
||||
month = int(my_row['date_send'][4:6])
|
||||
day = int(my_row['date_send'][6:8])
|
||||
jalali_date = jdatetime.date(year, month, day)
|
||||
gregorian_date = jalali_date.togregorian()
|
||||
created_at = datetime.datetime.combine(gregorian_date, datetime.time())
|
||||
p['design']['date_send'] = created_at
|
||||
if my_row['land_area'] and pd.notna(row['land_area']):
|
||||
p['design']["land_area"] = my_row["land_area"]
|
||||
if my_row['building_infrastructure'] and pd.notna(row['building_infrastructure']):
|
||||
p['design']["building_infrastructure"] = my_row["building_infrastructure"]
|
||||
if my_row['site_area'] and pd.notna(row['site_area']):
|
||||
p['design']["site_area"] = my_row["site_area"]
|
||||
if my_row['designer'] and pd.notna(row['designer']):
|
||||
p['design']["designer"] = [my_row["designer"]]
|
||||
p['design']["sts"] = 2
|
||||
|
||||
await use_collection(TaskEnv.CLN_PROJECT).update_one({'counter':int(my_row["code"])},{"$set":{'design':p['design']}})
|
||||
return
|
||||
|
||||
async def addMonitorSheet(self):
|
||||
base_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
project_root = os.path.abspath(os.path.join(base_dir, "../.."))
|
||||
excel_path = os.path.join(project_root, "projects1.xlsx")
|
||||
print("Excel file path:", excel_path)
|
||||
df = pd.read_excel(excel_path, engine="openpyxl", sheet_name="نظارت", dtype={'code': str,'date_create_project':str,'date_estimate_complete':str})
|
||||
projects = await use_collection(TaskEnv.CLN_PROJECT).find({}).to_list(None)
|
||||
for index, row in df.iterrows():
|
||||
my_row = row.to_dict()
|
||||
print(f"سطر {index}: {row.to_dict()}")
|
||||
print("code",my_row['code'])
|
||||
for p in projects:
|
||||
if str(my_row["code"]) in str(p['design']["code"]) and p['counter'] == int(str(my_row["code"])):
|
||||
print('projects',p)
|
||||
p['monitor'] = {}
|
||||
p['monitor']['base_information'] = {"budget" : []}
|
||||
p['monitor']['detail'] = {"add_25_percent" : [],"adding" : []}
|
||||
p['monitor']['agent'] = {}
|
||||
p['monitor']['status_branch'] = {'electricity': False, 'water': False, 'wastewater': False, 'gas': False, 'phone': False}
|
||||
if my_row['building_infrastructure'] and pd.notna(row['building_infrastructure']):
|
||||
p['design']["building_infrastructure"] = my_row["building_infrastructure"]
|
||||
print('a')
|
||||
if my_row['land_area'] and pd.notna(row['land_area']):
|
||||
p['design']["land_area"] = my_row["land_area"]
|
||||
print('a1',my_row['monitor_type'])
|
||||
if my_row['monitor_type'] == 'عالیه' :
|
||||
print('b1')
|
||||
p['monitor']['base_information']['type'] = 39
|
||||
elif my_row['monitor_type'] == 'عالیه و کارگاهی' :
|
||||
print('b2')
|
||||
p['monitor']['base_information']['type'] = 40
|
||||
else:
|
||||
p['monitor']['base_information']['type'] = 42
|
||||
print('a2')
|
||||
if my_row['date_create_project'] and pd.notna(row['date_create_project']):
|
||||
year = int(my_row['date_create_project'][:4])
|
||||
month = int(my_row['date_create_project'][4:6])
|
||||
day = int(my_row['date_create_project'][6:8])
|
||||
jalali_date = jdatetime.date(year, month, day)
|
||||
gregorian_date = jalali_date.togregorian()
|
||||
created_at = datetime.datetime.combine(gregorian_date, datetime.time())
|
||||
p['monitor']['detail']['date_create_project'] = created_at
|
||||
print('a3')
|
||||
if my_row['first_time'] and pd.notna(row['first_time']):
|
||||
p['monitor']['detail']["first_time"] = int(my_row["first_time"])
|
||||
print('a4')
|
||||
if my_row['extend_time'] and pd.notna(row['extend_time']):
|
||||
p['monitor']['detail']["extend_time"] = my_row["extend_time"]
|
||||
print('a5')
|
||||
# if my_row['date_estimate_complete'] and pd.notna(row['date_estimate_complete']):
|
||||
# print('my_row[date_estimate_complete]',my_row['date_estimate_complete'])
|
||||
# year_date = int(my_row['date_estimate_complete'][:4])
|
||||
# month_date = int(my_row['date_estimate_complete'][4:6])
|
||||
# day_date = int(my_row['date_estimate_complete'][6:8])
|
||||
# jalali_date_date = jdatetime.date(year_date, month_date, day_date)
|
||||
# gregorian_date_date = jalali_date_date.togregorian()
|
||||
# estimate = datetime.datetime.combine(gregorian_date_date, datetime.time())
|
||||
# p['monitor']['detail']['date_estimate_complete'] = estimate
|
||||
# print('a6')
|
||||
if my_row['first_amount'] and pd.notna(row['first_amount']):
|
||||
p['monitor']['detail']["first_amount"] = my_row["first_amount"]
|
||||
# price = {
|
||||
# '_id': uuid.uuid4(),
|
||||
# 'project_id': p['_id'],
|
||||
# 'first_amount': my_row["first_amount"]
|
||||
# }
|
||||
# await use_collection(TaskEnv.CLN_PROJECT_PRICE_REPORT).insert_one(price)
|
||||
print('a7')
|
||||
if my_row['add_25_percent'] and pd.notna(row['add_25_percent']):
|
||||
p['monitor']['detail']['add_25_percent'].append({"amount": my_row["add_25_percent"]})
|
||||
print('a8')
|
||||
if my_row['adding_amount'] and pd.notna(row['adding_amount']):
|
||||
p['monitor']['detail']['adding'].append({"amount":my_row["adding_amount"]})
|
||||
print('a9')
|
||||
if my_row['workshop_consultant'] and pd.notna(row['workshop_consultant']):
|
||||
p['monitor']['agent']['workshop_consultant'] = my_row["workshop_consultant"]
|
||||
print('a0')
|
||||
if my_row['constractor'] and pd.notna(row['constractor']):
|
||||
p['monitor']['agent']['constractor'] = my_row["constractor"]
|
||||
print('a00')
|
||||
p['has_monitor'] = True
|
||||
p['design']['sts'] = 2
|
||||
p['monitor']['sts'] = 2
|
||||
p['monitor']['has_design'] = True
|
||||
create_code = ProjectRepository().create_code(ProjectModel(**p))
|
||||
p['monitor']['code'] = 'S'+ create_code
|
||||
print('code',p['monitor']['code'])
|
||||
if 'date_create_project' in p['monitor']['detail'] and "first_time" in p['monitor']['detail']:
|
||||
p['date_delay'] = ProjectRepository().creat_date_delay(ProjectModel(**p))
|
||||
print('date_delay',p['date_delay'])
|
||||
await use_collection(TaskEnv.CLN_PROJECT).update_one({'counter':int(my_row["code"])},{"$set":p})
|
||||
return
|
||||
@@ -17,4 +17,5 @@ from .financial_pre_payment import *
|
||||
from .financial_status import *
|
||||
from .financial_adjust import *
|
||||
from .delivery import *
|
||||
from .report import *
|
||||
from .report import *
|
||||
from .excel import *
|
||||
@@ -0,0 +1,21 @@
|
||||
|
||||
from app.repositories.excel import ExcelRepository
|
||||
from core.app import app
|
||||
from core.utils.router import generate_router, shrink
|
||||
|
||||
router_base_url = 'excel'
|
||||
_tag_base = [router_base_url]
|
||||
router = generate_router(router_base_url, auth_dependencies=False, version='v2')
|
||||
repo = ExcelRepository()
|
||||
|
||||
@router.get('/design', tags=_tag_base)
|
||||
@shrink(repo.addDesignSheet)
|
||||
def design():
|
||||
pass
|
||||
|
||||
@router.get('/monitor', tags=_tag_base)
|
||||
@shrink(repo.addMonitorSheet)
|
||||
def monitor():
|
||||
pass
|
||||
|
||||
app.include_router(router)
|
||||
Reference in New Issue
Block a user