Files
sakhteman/app/repositories/excel.py
T

766 lines
47 KiB
Python

import datetime
import uuid
import pandas as pd
import os
from app.config import TaskEnv
from app.models.design_progress import DesignProgressModel, RecordModel, SubRecord, Record, UpdateDesignProgress
from app.models.project import ProjectModel, ProjectSts
from core.service.mongo_db import use_collection
import jdatetime
from app.repositories.project import ProjectRepository
from app.repositories.design_progress import DesignProgressRepository
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
async def addProgress1(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, "takmil_madarek.xlsx")
print("Excel file path:", excel_path)
df = pd.read_excel(excel_path, engine="openpyxl", dtype=str)
df = df.fillna("")
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)
my_project = p
progress_id = None
if my_row['first_time/send/date_at'] and my_row['first_time/send/date_at'] != "":
progress = DesignProgressModel(
project_id=my_project['_id'],
type=1,
state=my_row['state']
)
progress.init_id().cu_at()
await use_collection("design_progress").insert_one(progress.mongo_dict())
progress_id = progress.id
await self.createRecord(my_row, 'مرتبه اول', 'first_time',progress_id)
if 'second_time/send/date_at' in my_row and my_row['second_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه دوم', 'second_time', progress_id)
if 'third_time/send/date_at' in my_row and my_row['third_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه سوم', 'third_time', progress_id)
if 'forth_time/send/date_at' in my_row and my_row['forth_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه جهارم', 'forth_time', progress_id)
if 'fifth_time/send/date_at' in my_row and my_row['fifth_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه پنجم', 'fifth_time', progress_id)
if 'sixth_time/send/date_at' in my_row and my_row['sixth_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه ششم', 'sixth_time', progress_id)
if 'seventh_time/send/date_at' in my_row and my_row['seventh_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه هفتم', 'seventh_time', progress_id)
break
print("code", my_row['code'])
# faz zero------------------------------------------------------------------------
async def addProgressPhysical(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, "faz_zero.xlsx")
df = pd.read_excel(excel_path, engine="openpyxl", sheet_name="physical", dtype=str)
df = df.fillna("")
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)
my_project = p
progress_id = None
if my_row['first_time/send/date_at'] and my_row['first_time/send/date_at'] != "":
progress = DesignProgressModel(
project_id=my_project['_id'],
type=2,
state=my_row['state']
)
progress.init_id().cu_at()
await use_collection("design_progress").insert_one(progress.mongo_dict())
progress_type = DesignProgressModel(
project_id=my_project['_id'],
type=2,
state=my_row['state'],
parent_id= progress.id,
sub_type= 1,
)
progress_type.init_id().cu_at()
await use_collection("design_progress").insert_one(progress_type.mongo_dict())
progress_id = progress_type.id
await self.createRecord(my_row, 'مرتبه اول', 'first_time',progress_id)
if 'second_time/send/date_at' in my_row and my_row['second_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه دوم', 'second_time', progress_id)
if 'third_time/send/date_at' in my_row and my_row['third_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه سوم', 'third_time', progress_id)
if 'forth_time/send/date_at' in my_row and my_row['forth_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه جهارم', 'forth_time', progress_id)
if 'fifth_time/send/date_at' in my_row and my_row['fifth_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه پنجم', 'fifth_time', progress_id)
if 'sixth_time/send/date_at' in my_row and my_row['sixth_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه ششم', 'sixth_time', progress_id)
break
print("code", my_row['code'])
async def addProgressStudy(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, "faz_zero.xlsx")
df = pd.read_excel(excel_path, engine="openpyxl", sheet_name="study", dtype=str)
df = df.fillna("")
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)
my_project = p
progress_id = None
if my_row['first_time/send/date_at'] and my_row['first_time/send/date_at'] != "":
progress = await use_collection("design_progress").find_one({'project_id':my_project['_id'],'type':2})
if not progress:
progress = DesignProgressModel(
project_id=my_project['_id'],
type=2,
state=my_row['state']
)
progress.init_id().cu_at()
progress = progress.mongo_dict()
await use_collection("design_progress").insert_one(progress)
progress_type = DesignProgressModel(
project_id=my_project['_id'],
type=2,
state=my_row['state'],
parent_id=progress['_id'],
sub_type=2,
)
progress_type.init_id().cu_at()
await use_collection("design_progress").insert_one(progress_type.mongo_dict())
progress_id = progress_type.id
await self.createRecord(my_row, 'مرتبه اول', 'first_time', progress_id)
if 'second_time/send/date_at' in my_row and my_row[
'second_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه دوم', 'second_time', progress_id)
if 'third_time/send/date_at' in my_row and my_row[
'third_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه سوم', 'third_time', progress_id)
break
print("code", my_row['code'])
async def addProgressAlternativeSite(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, "faz_zero.xlsx")
df = pd.read_excel(excel_path, engine="openpyxl", sheet_name="alternative_site", dtype=str)
df = df.fillna("")
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)
my_project = p
progress_id = None
if my_row['first_time/send/date_at'] and my_row['first_time/send/date_at'] != "":
progress = await use_collection("design_progress").find_one({'project_id':my_project['_id'],'type':2})
if not progress:
progress = DesignProgressModel(
project_id=my_project['_id'],
type=2,
state=my_row['state']
)
progress.init_id().cu_at()
progress = progress.mongo_dict()
await use_collection("design_progress").insert_one(progress)
progress_type = DesignProgressModel(
project_id=my_project['_id'],
type=2,
state=my_row['state'],
parent_id=progress['_id'],
sub_type=3,
)
progress_type.init_id().cu_at()
await use_collection("design_progress").insert_one(progress_type.mongo_dict())
progress_id = progress_type.id
await self.createRecord(my_row, 'مرتبه اول', 'first_time', progress_id)
if 'second_time/send/date_at' in my_row and my_row[
'second_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه دوم', 'second_time', progress_id)
if 'third_time/send/date_at' in my_row and my_row[
'third_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه سوم', 'third_time', progress_id)
if 'forth_time/send/date_at' in my_row and my_row[
'forth_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه جهارم', 'forth_time', progress_id)
break
print("code", my_row['code'])
async def addProgressAlternativeArchitecture(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, "faz_zero.xlsx")
df = pd.read_excel(excel_path, engine="openpyxl", sheet_name="alternative_architecture", dtype=str)
df = df.fillna("")
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)
my_project = p
progress_id = None
if my_row['first_time/send/date_at'] and my_row['first_time/send/date_at'] != "":
progress = await use_collection("design_progress").find_one({'project_id':my_project['_id'],'type':2})
if not progress:
progress = DesignProgressModel(
project_id=my_project['_id'],
type=2,
state=my_row['state']
)
progress.init_id().cu_at()
progress = progress.mongo_dict()
await use_collection("design_progress").insert_one(progress)
progress_type = DesignProgressModel(
project_id=my_project['_id'],
type=2,
state=my_row['state'],
parent_id=progress['_id'],
sub_type=4,
)
progress_type.init_id().cu_at()
await use_collection("design_progress").insert_one(progress_type.mongo_dict())
progress_id = progress_type.id
await self.createRecord(my_row, 'مرتبه اول', 'first_time', progress_id)
if 'second_time/send/date_at' in my_row and my_row[
'second_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه دوم', 'second_time', progress_id)
if 'third_time/send/date_at' in my_row and my_row[
'third_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه سوم', 'third_time', progress_id)
if 'forth_time/send/date_at' in my_row and my_row[
'forth_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه جهارم', 'forth_time', progress_id)
if 'fifth_time/send/date_at' in my_row and my_row[
'fifth_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه پنجم', 'fifth_time', progress_id)
break
print("code", my_row['code'])
async def completeProgressZero(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, "faz_zero.xlsx")
df = pd.read_excel(excel_path, engine="openpyxl", sheet_name="alternative_architecture", dtype=str)
df = df.fillna("")
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)
my_project = p
progress = await use_collection("design_progress").find_one(
{'project_id': my_project['_id'], 'type': 2})
if progress and 'complete_at' in my_row and my_row['complete_at'] != '':
print('jjjjjjjjjjjjjjjjjjjj',progress["_id"])
c = UpdateDesignProgress(complete_at=my_row['complete_at'])
await DesignProgressRepository().update(progress["_id"],c)
break
print("code", my_row['code'])
#----------------------------------------------------------------------------------------
# faz one-----------------------------------------------------------------
async def addProgressFazOneArt(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, "faz_one.xlsx")
df = pd.read_excel(excel_path, engine="openpyxl", sheet_name="architecture", dtype=str)
df = df.fillna("")
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)
my_project = p
progress_id = None
if my_row['first_time/send/date_at'] and my_row['first_time/send/date_at'] != "":
progress = DesignProgressModel(
project_id=my_project['_id'],
type=3,
state=my_row['state']
)
progress.init_id().cu_at()
await use_collection("design_progress").insert_one(progress.mongo_dict())
progress_type = DesignProgressModel(
project_id=my_project['_id'],
type=3,
state=my_row['state'],
parent_id= progress.id,
sub_type= 5,
)
progress_type.init_id().cu_at()
await use_collection("design_progress").insert_one(progress_type.mongo_dict())
progress_id = progress_type.id
await self.createRecord(my_row, 'مرتبه اول', 'first_time',progress_id)
if 'second_time/send/date_at' in my_row and my_row['second_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه دوم', 'second_time', progress_id)
if 'third_time/send/date_at' in my_row and my_row['third_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه سوم', 'third_time', progress_id)
if 'forth_time/send/date_at' in my_row and my_row['forth_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه جهارم', 'forth_time', progress_id)
if 'fifth_time/send/date_at' in my_row and my_row['fifth_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه پنجم', 'fifth_time', progress_id)
if 'sixth_time/send/date_at' in my_row and my_row['sixth_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه ششم', 'sixth_time', progress_id)
if 'seventh_time/send/date_at' in my_row and my_row['seventh_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه هفتم', 'seventh_time', progress_id)
if 'eighth_time/send/date_at' in my_row and my_row['eighth_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه هشتم', 'eighth_time', progress_id)
break
print("code", my_row['code'])
async def addProgressFazOneUniversity(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, "faz_one.xlsx")
df = pd.read_excel(excel_path, engine="openpyxl", sheet_name="university", dtype=str)
df = df.fillna("")
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)
my_project = p
progress_id = None
if my_row['first_time/send/date_at'] and my_row['first_time/send/date_at'] != "":
progress = await use_collection("design_progress").find_one({'project_id':my_project['_id'],'type':3})
if not progress:
progress = DesignProgressModel(
project_id=my_project['_id'],
type=3,
state=my_row['state']
)
progress.init_id().cu_at()
progress = progress.mongo_dict()
await use_collection("design_progress").insert_one(progress)
progress_type = DesignProgressModel(
project_id=my_project['_id'],
type=3,
state=my_row['state'],
parent_id=progress['_id'],
sub_type=6,
)
progress_type.init_id().cu_at()
await use_collection("design_progress").insert_one(progress_type.mongo_dict())
progress_id = progress_type.id
await self.createRecord(my_row, 'مرتبه اول', 'first_time', progress_id)
if 'second_time/send/date_at' in my_row and my_row[
'second_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه دوم', 'second_time', progress_id)
if 'third_time/send/date_at' in my_row and my_row[
'third_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه سوم', 'third_time', progress_id)
if 'forth_time/send/date_at' in my_row and my_row[
'forth_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه جهارم', 'forth_time', progress_id)
if 'fifth_time/send/date_at' in my_row and my_row[
'fifth_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه پنجم', 'fifth_time', progress_id)
break
print("code", my_row['code'])
async def addProgressFazOneAll(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, "faz_one.xlsx")
df = pd.read_excel(excel_path, engine="openpyxl", sheet_name="university", dtype=str)
df = df.fillna("")
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)
my_project = p
progress_id = None
if my_row['first_time/send/date_at'] and my_row['first_time/send/date_at'] != "":
progress = await use_collection("design_progress").find_one({'project_id':my_project['_id'],'type':3})
if not progress:
progress = DesignProgressModel(
project_id=my_project['_id'],
type=3,
state=my_row['state']
)
progress.init_id().cu_at()
progress = progress.mongo_dict()
await use_collection("design_progress").insert_one(progress)
progress_type = DesignProgressModel(
project_id=my_project['_id'],
type=3,
state=my_row['state'],
parent_id=progress['_id'],
sub_type=7,
)
progress_type.init_id().cu_at()
await use_collection("design_progress").insert_one(progress_type.mongo_dict())
progress_id = progress_type.id
await self.createRecord(my_row, 'مرتبه اول', 'first_time', progress_id)
if 'second_time/send/date_at' in my_row and my_row[
'second_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه دوم', 'second_time', progress_id)
if 'third_time/send/date_at' in my_row and my_row[
'third_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه سوم', 'third_time', progress_id)
break
print("code", my_row['code'])
# طراحی دوربین و شبکه
async def addProgressNetworkDesign(self):
base_dir = os.path.dirname(os.path.abspath(__file__))
project_root = os.path.abspath(os.path.join(base_dir, "../../excel"))
excel_path = os.path.join(project_root, "network.xlsx")
df = pd.read_excel(excel_path, engine="openpyxl", dtype=str)
df = df.fillna("")
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)
my_project = p
if my_row['first_time/send/date_at'] and my_row['first_time/send/date_at'] != "":
progress = DesignProgressModel(
project_id=my_project['_id'],
type=4,
state=my_row['state']
)
progress.init_id().cu_at()
await use_collection("design_progress").insert_one(progress.mongo_dict())
progress_id = progress.id
await self.createRecord(my_row, 'مرتبه اول', 'first_time', progress_id)
break
print("code", my_row['code'])
return True
async def addProgressFazTwo(self):
base_dir = os.path.dirname(os.path.abspath(__file__))
project_root = os.path.abspath(os.path.join(base_dir, "../../excel"))
excel_path = os.path.join(project_root, "faz_two.xlsx")
print("Excel file path:", excel_path)
df = pd.read_excel(excel_path, engine="openpyxl", dtype=str)
df = df.fillna("")
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)
my_project = p
progress_id = None
if my_row['first_time/send/date_at'] and my_row['first_time/send/date_at'] != "":
progress = DesignProgressModel(
project_id=my_project['_id'],
type=5,
state=my_row['state']
)
progress.init_id().cu_at()
await use_collection("design_progress").insert_one(progress.mongo_dict())
progress_id = progress.id
await self.createRecord(my_row, 'مرتبه اول', 'first_time',progress_id)
if 'second_time/send/date_at' in my_row and my_row['second_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه دوم', 'second_time', progress_id)
if 'third_time/send/date_at' in my_row and my_row['third_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه سوم', 'third_time', progress_id)
if 'forth_time/send/date_at' in my_row and my_row['forth_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه جهارم', 'forth_time', progress_id)
if 'fifth_time/send/date_at' in my_row and my_row['fifth_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه پنجم', 'fifth_time', progress_id)
break
print("code", my_row['code'])
return True
async def addProgressMetri(self):
base_dir = os.path.dirname(os.path.abspath(__file__))
project_root = os.path.abspath(os.path.join(base_dir, "../../excel"))
excel_path = os.path.join(project_root, "metri.xlsx")
print("Excel file path:", excel_path)
df = pd.read_excel(excel_path, engine="openpyxl", dtype=str)
df = df.fillna("")
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)
my_project = p
progress_id = None
if my_row['first_time/send/date_at'] and my_row['first_time/send/date_at'] != "":
progress = DesignProgressModel(
project_id=my_project['_id'],
type=6,
state=my_row['state']
)
progress.init_id().cu_at()
await use_collection("design_progress").insert_one(progress.mongo_dict())
progress_id = progress.id
await self.createRecord(my_row, 'مرتبه اول', 'first_time',progress_id)
if 'second_time/send/date_at' in my_row and my_row['second_time/send/date_at'] != "" and progress_id:
await self.createRecord(my_row, 'مرتبه دوم', 'second_time', progress_id)
break
print("code", my_row['code'])
return True
async def addProgressTender(self):
base_dir = os.path.dirname(os.path.abspath(__file__))
project_root = os.path.abspath(os.path.join(base_dir, "../../excel"))
excel_path = os.path.join(project_root, "tender.xlsx")
print("Excel file path:", excel_path)
df = pd.read_excel(excel_path, engine="openpyxl", dtype=str)
df = df.fillna("")
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)
my_project = p
if my_row['first_time/send/date_at'] and my_row['first_time/send/date_at'] != "":
progress = DesignProgressModel(
project_id=my_project['_id'],
type=7,
state=my_row['state']
)
progress.init_id().cu_at()
await use_collection("design_progress").insert_one(progress.mongo_dict())
progress_id = progress.id
await self.createRecord(my_row, 'مرتبه اول', 'first_time',progress_id)
break
print("code", my_row['code'])
return True
async def changeStatus(self):
base_dir = os.path.dirname(os.path.abspath(__file__))
project_root = os.path.abspath(os.path.join(base_dir, "../../excel"))
excel_path = os.path.join(project_root, "status.xlsx")
print("Excel file path:", excel_path)
df = pd.read_excel(excel_path, engine="openpyxl", dtype=str)
df = df.fillna("")
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)
sts = 2
if my_row["status"] == 'متوقف':
sts = 3
elif my_row["status"] == 'خاتمه یافته':
sts=4
print('sts',sts)
await use_collection('project').update_one({"_id": p["_id"]}, {"$set": {
'design.sts': sts, 'design.reason_stop': my_row["reason_stop"],'design.description':my_row['description']
}})
sts_class = ProjectSts(
project_id=p["_id"],
type='design',
sts=sts,
description=my_row["reason_stop"]
).init_id().cu_at()
await use_collection(TaskEnv.CLN_PROJECT_STS).insert_one(sts_class.mongo_dict())
break
print("code", my_row['code'])
return True
def createDate(self, date):
if '/' in date:
date = date.replace('/', '')
year = int(date[:4])
month = int(date[4:6])
if month == 0:
month = 1
print(month,'month')
day = int(date[6:8])
if day ==0:
day=1
print(day,'day')
jalali_date = jdatetime.date(year, month, day)
gregorian_date = jalali_date.togregorian()
created_at = datetime.datetime.combine(gregorian_date, datetime.time.min)
return created_at
async def createRecord(self, my_row, _time_f, _time_e, progress_id):
send = SubRecord(
date_at=self.createDate(my_row[f'{_time_e}/send/date_at']),
number=my_row[f'{_time_e}/send/number'],
description=None
)
record = RecordModel(
design_progress_id=progress_id,
title=_time_f,
send=send,
)
if f'{_time_e}/receive/date_at' in my_row and my_row[f'{_time_e}/receive/date_at'] != "":
print(my_row[f'{_time_e}/receive/date_at'])
receive = SubRecord(
date_at=self.createDate(my_row[f'{_time_e}/receive/date_at']),
number=my_row[f'{_time_e}/receive/number'],
description=None
)
record.receive = receive
record.init_id().cu_at()
await use_collection("design_progress_record").insert_one(record.mongo_dict())
return record