mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-19 06:39:13 +00:00
Various fixes to IfcCostSchedule PDF export (#6983)
* IfcCostSchedue PDF export: changed Output type from off to auto * Fixed currency value * Fix summary total if no nested structure present
This commit is contained in:
@@ -940,12 +940,12 @@ class ExportCostSchedulesToPDF(bpy.types.Operator, ExportHelper):
|
|||||||
default=True,
|
default=True,
|
||||||
)
|
)
|
||||||
force_schedule_type: bpy.props.EnumProperty(
|
force_schedule_type: bpy.props.EnumProperty(
|
||||||
name="Force output type",
|
name="Output type",
|
||||||
description="Force the output to this type\nalso if it is not coincident with the cost schedule Predefined Type",
|
description='Force the output to this type.\n"Auto" defaults to selected cost schedule Predefined Type',
|
||||||
items=[
|
items=[
|
||||||
(
|
(
|
||||||
"OFF",
|
"AUTO",
|
||||||
"Off",
|
"By PredefinedType",
|
||||||
"Uses Cost Schedule Predefined Type",
|
"Uses Cost Schedule Predefined Type",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@@ -959,7 +959,7 @@ class ExportCostSchedulesToPDF(bpy.types.Operator, ExportHelper):
|
|||||||
"Forces the output as a schedule of rates",
|
"Forces the output as a schedule of rates",
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
default="OFF",
|
default="AUTO",
|
||||||
)
|
)
|
||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
|
|||||||
@@ -626,19 +626,19 @@ class Ifc5DPdfWriter(Ifc5Dwriter):
|
|||||||
cost_schedule_name = self.cost_schedule.Name or "Unnamed"
|
cost_schedule_name = self.cost_schedule.Name or "Unnamed"
|
||||||
if self.force_schedule_type in ("PRICEDBILLOFQUANTITIES", "SCHEDULEOFRATES"):
|
if self.force_schedule_type in ("PRICEDBILLOFQUANTITIES", "SCHEDULEOFRATES"):
|
||||||
schedule_type = self.force_schedule_type
|
schedule_type = self.force_schedule_type
|
||||||
elif self.force_schedule_type is None or self.force_schedule_type == "OFF":
|
elif self.force_schedule_type is None or self.force_schedule_type == "AUTO":
|
||||||
schedule_type = self.cost_schedule.PredefinedType
|
schedule_type = self.cost_schedule.PredefinedType
|
||||||
if schedule_type not in HANDLED_COST_SCHEDULE_TYPES:
|
if schedule_type not in HANDLED_COST_SCHEDULE_TYPES:
|
||||||
schedule_type = "PRICEDBILLOFQUANTITIES"
|
schedule_type = "PRICEDBILLOFQUANTITIES"
|
||||||
else:
|
else:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
"force_schedule_type can be set to OFF, PRICEDBILLOFQUANTITIES, SCHEDULEOFRATES values only."
|
"force_schedule_type can be set to AUTO, PRICEDBILLOFQUANTITIES, SCHEDULEOFRATES values only."
|
||||||
)
|
)
|
||||||
project_monetary_unit = self.file.by_type("IfcMonetaryUnit")
|
project_monetary_unit = self.file.by_type("IfcMonetaryUnit")
|
||||||
if project_monetary_unit:
|
if project_monetary_unit:
|
||||||
project_currency = project_monetary_unit[0].Currency
|
project_currency = project_monetary_unit[0].Currency
|
||||||
else:
|
else:
|
||||||
project_currency = '""'
|
project_currency = ""
|
||||||
|
|
||||||
# export csv file
|
# export csv file
|
||||||
csv_file_writer = Ifc5DCsvWriter(file=self.file, output=temp_dir, cost_schedule=self.cost_schedule)
|
csv_file_writer = Ifc5DCsvWriter(file=self.file, output=temp_dir, cost_schedule=self.cost_schedule)
|
||||||
@@ -660,7 +660,7 @@ class Ifc5DPdfWriter(Ifc5Dwriter):
|
|||||||
typst_main_content += ' schedule_name: "{}",\n'.format(cost_schedule_name)
|
typst_main_content += ' schedule_name: "{}",\n'.format(cost_schedule_name)
|
||||||
typst_main_content += ' schedule_description: "{}",\n'.format(self.cost_schedule.Description or "")
|
typst_main_content += ' schedule_description: "{}",\n'.format(self.cost_schedule.Description or "")
|
||||||
typst_main_content += ' schedule_type: "{}",\n'.format(schedule_type)
|
typst_main_content += ' schedule_type: "{}",\n'.format(schedule_type)
|
||||||
typst_main_content += " project_currency: {},\n".format(project_currency)
|
typst_main_content += ' project_currency: "{}",\n'.format(project_currency)
|
||||||
for option_name, default_value in DEFAULT_OPTIONS.items():
|
for option_name, default_value in DEFAULT_OPTIONS.items():
|
||||||
value = self.options.get(option_name, default_value)
|
value = self.options.get(option_name, default_value)
|
||||||
if isinstance(value, bool):
|
if isinstance(value, bool):
|
||||||
|
|||||||
@@ -342,8 +342,8 @@
|
|||||||
) = {
|
) = {
|
||||||
let data = csv(path, delimiter: delimiter, row-type: dictionary)
|
let data = csv(path, delimiter: delimiter, row-type: dictionary)
|
||||||
let new_rows = data.map(item => arrange_summary_row(item, options))
|
let new_rows = data.map(item => arrange_summary_row(item, options))
|
||||||
let general_total = data.filter(row => row.at("Index") == "1")
|
let general_total = data.filter(row => row.at("ItemIsASum") == "False")
|
||||||
.map(row => float(row.at("TotalPrice")))
|
.map(row => float(row.at("RateSubtotal", default: 0.0))*float(row.at("Quantity", default: 0.0)))
|
||||||
.sum(default: 0.00)
|
.sum(default: 0.00)
|
||||||
|
|
||||||
set text(size: 10pt)
|
set text(size: 10pt)
|
||||||
|
|||||||
Reference in New Issue
Block a user