3 changed files with 0 additions and 503 deletions
-
26src/main/resources/sql/init_dm_attribute_template_item.sql
-
128src/main/resources/sql/init_dm_method_seq_rule.sql
-
349src/main/resources/sql/report/qc_subpart_full_port.sql
@ -1,26 +0,0 @@ |
|||||
/* |
|
||||
刀模属性-检验模板:按“物料(刀模)+模板”覆盖检验项目/标准值 |
|
||||
说明:当物料的检验项目需要随时调整时,不直接使用模板明细,而是将覆盖后的项目写入本表。 |
|
||||
*/ |
|
||||
|
|
||||
if not exists (select 1 from sysobjects where name='dm_attribute_template_item' and xtype='U') |
|
||||
begin |
|
||||
create table dm_attribute_template_item ( |
|
||||
site varchar(32) not null, |
|
||||
bu_no varchar(32) not null, |
|
||||
attribute_no varchar(64) not null, |
|
||||
template_id varchar(64) not null, |
|
||||
item_no varchar(64) not null, |
|
||||
default_value decimal(18,6) null, |
|
||||
max_value decimal(18,6) null, |
|
||||
min_value decimal(18,6) null, |
|
||||
order_id int null, |
|
||||
create_by varchar(64) null, |
|
||||
create_time datetime null, |
|
||||
update_by varchar(64) null, |
|
||||
update_date datetime null, |
|
||||
constraint PK_dm_attribute_template_item primary key (site, bu_no, attribute_no, template_id, item_no) |
|
||||
); |
|
||||
end |
|
||||
go |
|
||||
|
|
||||
@ -1,128 +0,0 @@ |
|||||
-- ===================================================== |
|
||||
-- 初始化检验方法序列号规则 |
|
||||
-- 说明:为不同工厂创建检验方法的序列号规则 |
|
||||
-- 使用方法:根据实际工厂编号替换 @site 变量 |
|
||||
-- ===================================================== |
|
||||
|
|
||||
-- 清理旧数据(可选,谨慎使用) |
|
||||
-- DELETE FROM seq_rule WHERE type = 'DM'; |
|
||||
|
|
||||
-- 插入检验方法序列号规则 |
|
||||
-- 请根据实际情况替换以下 @site 占位符为实际的工厂编号 |
|
||||
|
|
||||
-- IQC 来料检验方法 (inspection_type_no = 105) |
|
||||
INSERT INTO seq_rule (site, type, name, prefix, length, current_val, create_date, create_by) |
|
||||
SELECT |
|
||||
site, |
|
||||
'DM' as type, |
|
||||
'来料检验方法' as name, |
|
||||
'IQC' as prefix, |
|
||||
4 as length, |
|
||||
1 as current_val, |
|
||||
GETDATE() as create_date, |
|
||||
'SYSTEM' as create_by |
|
||||
FROM ( |
|
||||
SELECT DISTINCT site FROM eam_site WHERE site IS NOT NULL |
|
||||
) AS sites |
|
||||
WHERE NOT EXISTS ( |
|
||||
SELECT 1 FROM seq_rule |
|
||||
WHERE seq_rule.site = sites.site |
|
||||
AND seq_rule.type = 'DM' |
|
||||
AND seq_rule.prefix = 'IQC' |
|
||||
); |
|
||||
|
|
||||
-- IPQC 过程检验方法 (inspection_type_no = 101, 102, 103, 104) |
|
||||
INSERT INTO seq_rule (site, type, name, prefix, length, current_val, create_date, create_by) |
|
||||
SELECT |
|
||||
site, |
|
||||
'DM' as type, |
|
||||
'过程检验方法' as name, |
|
||||
'IPQC' as prefix, |
|
||||
4 as length, |
|
||||
1 as current_val, |
|
||||
GETDATE() as create_date, |
|
||||
'SYSTEM' as create_by |
|
||||
FROM ( |
|
||||
SELECT DISTINCT site FROM eam_site WHERE site IS NOT NULL |
|
||||
) AS sites |
|
||||
WHERE NOT EXISTS ( |
|
||||
SELECT 1 FROM seq_rule |
|
||||
WHERE seq_rule.site = sites.site |
|
||||
AND seq_rule.type = 'DM' |
|
||||
AND seq_rule.prefix = 'IPQC' |
|
||||
); |
|
||||
|
|
||||
-- FAI 首件检验方法 (inspection_type_no = 106) |
|
||||
INSERT INTO seq_rule (site, type, name, prefix, length, current_val, create_date, create_by) |
|
||||
SELECT |
|
||||
site, |
|
||||
'DM' as type, |
|
||||
'首件检验方法' as name, |
|
||||
'FAI' as prefix, |
|
||||
4 as length, |
|
||||
1 as current_val, |
|
||||
GETDATE() as create_date, |
|
||||
'SYSTEM' as create_by |
|
||||
FROM ( |
|
||||
SELECT DISTINCT site FROM eam_site WHERE site IS NOT NULL |
|
||||
) AS sites |
|
||||
WHERE NOT EXISTS ( |
|
||||
SELECT 1 FROM seq_rule |
|
||||
WHERE seq_rule.site = sites.site |
|
||||
AND seq_rule.type = 'DM' |
|
||||
AND seq_rule.prefix = 'FAI' |
|
||||
); |
|
||||
|
|
||||
-- FQC 最终检验方法 (inspection_type_no = 107) |
|
||||
INSERT INTO seq_rule (site, type, name, prefix, length, current_val, create_date, create_by) |
|
||||
SELECT |
|
||||
site, |
|
||||
'DM' as type, |
|
||||
'最终检验方法' as name, |
|
||||
'FQC' as prefix, |
|
||||
4 as length, |
|
||||
1 as current_val, |
|
||||
GETDATE() as create_date, |
|
||||
'SYSTEM' as create_by |
|
||||
FROM ( |
|
||||
SELECT DISTINCT site FROM eam_site WHERE site IS NOT NULL |
|
||||
) AS sites |
|
||||
WHERE NOT EXISTS ( |
|
||||
SELECT 1 FROM seq_rule |
|
||||
WHERE seq_rule.site = sites.site |
|
||||
AND seq_rule.type = 'DM' |
|
||||
AND seq_rule.prefix = 'FQC' |
|
||||
); |
|
||||
|
|
||||
-- PQC 出货检验方法 (inspection_type_no = 108) |
|
||||
INSERT INTO seq_rule (site, type, name, prefix, length, current_val, create_date, create_by) |
|
||||
SELECT |
|
||||
site, |
|
||||
'DM' as type, |
|
||||
'出货检验方法' as name, |
|
||||
'PQC' as prefix, |
|
||||
4 as length, |
|
||||
1 as current_val, |
|
||||
GETDATE() as create_date, |
|
||||
'SYSTEM' as create_by |
|
||||
FROM ( |
|
||||
SELECT DISTINCT site FROM eam_site WHERE site IS NOT NULL |
|
||||
) AS sites |
|
||||
WHERE NOT EXISTS ( |
|
||||
SELECT 1 FROM seq_rule |
|
||||
WHERE seq_rule.site = sites.site |
|
||||
AND seq_rule.type = 'DM' |
|
||||
AND seq_rule.prefix = 'PQC' |
|
||||
); |
|
||||
|
|
||||
-- 查询验证 |
|
||||
SELECT * FROM seq_rule WHERE type = 'DM' ORDER BY site, prefix; |
|
||||
|
|
||||
-- ===================================================== |
|
||||
-- 编号格式说明: |
|
||||
-- IQC-0001, IQC-0002, ... (来料检验方法) |
|
||||
-- IPQC-0001, IPQC-0002, ... (过程检验方法) |
|
||||
-- FAI-0001, FAI-0002, ... (首件检验方法) |
|
||||
-- FQC-0001, FQC-0002, ... (最终检验方法) |
|
||||
-- PQC-0001, PQC-0002, ... (出货检验方法) |
|
||||
-- ===================================================== |
|
||||
@ -1,349 +0,0 @@ |
|||||
/* |
|
||||
QC SubPart SQL 移植包(report 模块) |
|
||||
说明: |
|
||||
1) 保持同库不改表,仅迁移查询/新增/更新逻辑 SQL。 |
|
||||
2) 返回风格以当前项目 R 结构为准(code/msg/rows/total/...)。 |
|
||||
3) 记录号并发规则保留 SQLServer 锁语法:UPDLOCK, HOLDLOCK。 |
|
||||
*/ |
|
||||
|
|
||||
/* 1. 主表查询:/report/qcSubPartQuery/getHeaderList */ |
|
||||
SELECT id, |
|
||||
site, |
|
||||
record_no AS recordNo, |
|
||||
order_no AS orderNo, |
|
||||
seq_no AS seqNo, |
|
||||
citem_code AS citemCode, |
|
||||
item_no AS itemNo, |
|
||||
item_desc AS itemDesc, |
|
||||
work_center_no AS workCenterNo, |
|
||||
bom_rev_no AS bomRevNo, |
|
||||
finished_part_no AS partNo, |
|
||||
finished_part_desc AS partDesc, |
|
||||
sku, |
|
||||
resource_id AS resourceId, |
|
||||
resource_desc AS resourceDesc, |
|
||||
produce_date AS scheduledDate, |
|
||||
qualified_qty AS qtyApprove, |
|
||||
create_by AS createBy, |
|
||||
create_date AS createDate, |
|
||||
update_by AS updateBy, |
|
||||
update_date AS updateDate |
|
||||
FROM qc_subpart_record |
|
||||
WHERE site = :site |
|
||||
AND del_flag = 'N' |
|
||||
ORDER BY create_date DESC; |
|
||||
|
|
||||
/* 2. 明细查询:/report/qcSubPartQuery/getDetailList */ |
|
||||
SELECT id, |
|
||||
site, |
|
||||
header_id AS headerId, |
|
||||
record_no AS recordNo, |
|
||||
sub_part_no AS partNo, |
|
||||
sub_part_desc AS partDesc, |
|
||||
supplier_id AS supplierId, |
|
||||
supplier_name AS supplierName, |
|
||||
model_no AS modelNo, |
|
||||
manufacture_date AS manufactureDate, |
|
||||
sort_no AS sortNo |
|
||||
FROM qc_subpart_record_detail |
|
||||
WHERE site = :site |
|
||||
AND record_no = :recordNo |
|
||||
AND del_flag = 'N' |
|
||||
ORDER BY sort_no ASC; |
|
||||
|
|
||||
/* 3. 新增弹窗主数据:/report/qcSubPartAdd/queryAddMainList */ |
|
||||
SELECT DISTINCT |
|
||||
a.site, |
|
||||
ISNULL(j.sourceBu, '') AS citemCode, |
|
||||
a.orderno AS orderNo, |
|
||||
a.seqno AS seqNo, |
|
||||
a.itemno AS itemNo, |
|
||||
c.operation_desc AS itemDesc, |
|
||||
a.s_workcenterno AS workCenterNo, |
|
||||
d.bomrevno AS bomRevNo, |
|
||||
a.part_no AS partNo, |
|
||||
j.part_desc AS partDesc, |
|
||||
j.sku AS sku, |
|
||||
a.s_resourceid AS resourceId, |
|
||||
re.resource_desc AS resourceDesc, |
|
||||
CAST(a.s_scheduleddate AS DATE) AS scheduledDate, |
|
||||
ISNULL(a.qtyapprove, 0) AS qtyApprove |
|
||||
FROM soscheduledrouting a |
|
||||
INNER JOIN part j |
|
||||
ON a.site = j.site |
|
||||
AND a.part_no = j.part_no |
|
||||
INNER JOIN so_routing c |
|
||||
ON a.site = c.site |
|
||||
AND a.orderno = c.order_no |
|
||||
AND a.itemno = c.item_no |
|
||||
INNER JOIN shoporder d |
|
||||
ON a.site = d.site |
|
||||
AND a.orderno = d.orderno |
|
||||
LEFT JOIN resource re |
|
||||
ON re.Site = a.site |
|
||||
AND re.resource_id = a.s_resourceid |
|
||||
WHERE a.site = :site |
|
||||
AND (:citemCode = '' OR a.site + '_' + j.sourceBu = :citemCode) |
|
||||
AND (:orderNo = '' OR a.orderno LIKE '%' + :orderNo + '%') |
|
||||
AND (:seqNo = '' OR a.seqno LIKE '%' + :seqNo + '%') |
|
||||
AND (:partNo = '' OR a.part_no LIKE '%' + :partNo + '%') |
|
||||
AND (:sku = '' OR j.sku LIKE '%' + :sku + '%') |
|
||||
AND (:startDate IS NULL OR a.s_scheduleddate >= :startDate) |
|
||||
AND (:endDate IS NULL OR :endDate >= a.s_scheduleddate) |
|
||||
ORDER BY a.seqno DESC; |
|
||||
|
|
||||
/* 4. 新增弹窗明细数据:/report/qcSubPartAdd/queryAddDetailList(主查询) */ |
|
||||
SELECT DISTINCT |
|
||||
h.part_no AS partNo, |
|
||||
p.part_desc AS partDesc, |
|
||||
h.supplier_no AS supplierId, |
|
||||
s.SupplierName AS supplierName, |
|
||||
ISNULL(r.model_no, '') AS modelNo, |
|
||||
CAST(r.manufacture_date AS DATE) AS manufactureDate |
|
||||
FROM sfdc_material_hist h |
|
||||
LEFT JOIN part p |
|
||||
ON p.site = h.site |
|
||||
AND p.part_no = h.part_no |
|
||||
LEFT JOIN c_roll_info r |
|
||||
ON r.site = h.site |
|
||||
AND r.roll_no = h.roll_no |
|
||||
LEFT JOIN view_Supplier s |
|
||||
ON s.Site = h.site |
|
||||
AND s.SupplierID = h.supplier_no |
|
||||
WHERE h.site = :site |
|
||||
AND h.assjob_seq_no = :seqNo; |
|
||||
|
|
||||
/* 4.1 新增弹窗明细数据兜底:按历史子件记录回填 */ |
|
||||
SELECT DISTINCT |
|
||||
d.sub_part_no AS partNo, |
|
||||
d.sub_part_desc AS partDesc, |
|
||||
d.supplier_id AS supplierId, |
|
||||
d.supplier_name AS supplierName, |
|
||||
d.model_no AS modelNo, |
|
||||
d.manufacture_date AS manufactureDate |
|
||||
FROM qc_subpart_record_detail d |
|
||||
INNER JOIN qc_subpart_record h |
|
||||
ON h.site = d.site |
|
||||
AND h.id = d.header_id |
|
||||
WHERE h.site = :site |
|
||||
AND h.seq_no = :seqNo |
|
||||
AND h.del_flag = 'N' |
|
||||
AND d.del_flag = 'N' |
|
||||
ORDER BY d.sub_part_no; |
|
||||
|
|
||||
/* 5. 记录号并发锁:saveAddRecord */ |
|
||||
SELECT ISNULL(MAX(CAST(SUBSTRING(record_no, CHARINDEX('_', record_no) + 1, 20) AS INT)), 0) |
|
||||
FROM qc_subpart_record WITH (UPDLOCK, HOLDLOCK) |
|
||||
WHERE site = :site |
|
||||
AND seq_no = :seqNo |
|
||||
AND del_flag = 'N'; |
|
||||
|
|
||||
/* 6. 新增主记录:saveAddRecord */ |
|
||||
INSERT INTO qc_subpart_record( |
|
||||
site, |
|
||||
record_no, |
|
||||
order_no, |
|
||||
seq_no, |
|
||||
citem_code, |
|
||||
item_no, |
|
||||
item_desc, |
|
||||
work_center_no, |
|
||||
bom_rev_no, |
|
||||
finished_part_no, |
|
||||
finished_part_desc, |
|
||||
sku, |
|
||||
resource_id, |
|
||||
resource_desc, |
|
||||
produce_date, |
|
||||
qualified_qty, |
|
||||
create_by, |
|
||||
create_date, |
|
||||
update_by, |
|
||||
update_date, |
|
||||
del_flag |
|
||||
) VALUES ( |
|
||||
:site, |
|
||||
:recordNo, |
|
||||
:orderNo, |
|
||||
:seqNo, |
|
||||
:citemCode, |
|
||||
:itemNo, |
|
||||
:itemDesc, |
|
||||
:workCenterNo, |
|
||||
:bomRevNo, |
|
||||
:partNo, |
|
||||
:partDesc, |
|
||||
:sku, |
|
||||
:resourceId, |
|
||||
:resourceDesc, |
|
||||
:produceDate, |
|
||||
:qualifiedQty, |
|
||||
:username, |
|
||||
GETDATE(), |
|
||||
:username, |
|
||||
GETDATE(), |
|
||||
'N' |
|
||||
); |
|
||||
|
|
||||
/* 7. 新增明细:saveAddRecord / updateRecord */ |
|
||||
INSERT INTO qc_subpart_record_detail( |
|
||||
site, |
|
||||
header_id, |
|
||||
record_no, |
|
||||
sub_part_no, |
|
||||
sub_part_desc, |
|
||||
supplier_id, |
|
||||
supplier_name, |
|
||||
model_no, |
|
||||
manufacture_date, |
|
||||
sort_no, |
|
||||
create_by, |
|
||||
create_date, |
|
||||
del_flag |
|
||||
) VALUES ( |
|
||||
:site, |
|
||||
:headerId, |
|
||||
:recordNo, |
|
||||
:partNo, |
|
||||
:partDesc, |
|
||||
:supplierId, |
|
||||
:supplierName, |
|
||||
:modelNo, |
|
||||
:manufactureDate, |
|
||||
:sortNo, |
|
||||
:username, |
|
||||
GETDATE(), |
|
||||
'N' |
|
||||
); |
|
||||
|
|
||||
/* 8. 更新主记录:updateRecord(仅改主表关键字段) */ |
|
||||
UPDATE qc_subpart_record |
|
||||
SET order_no = :orderNo, |
|
||||
item_no = :itemNo, |
|
||||
item_desc = :itemDesc, |
|
||||
work_center_no = :workCenterNo, |
|
||||
bom_rev_no = :bomRevNo, |
|
||||
resource_id = :resourceId, |
|
||||
resource_desc = :resourceDesc, |
|
||||
produce_date = :produceDate, |
|
||||
qualified_qty = :qualifiedQty, |
|
||||
update_by = :username, |
|
||||
update_date = GETDATE() |
|
||||
WHERE site = :site |
|
||||
AND record_no = :recordNo |
|
||||
AND del_flag = 'N'; |
|
||||
|
|
||||
/* 10. 如库表缺字段时,执行以下补列脚本(SQLServer) */ |
|
||||
IF COL_LENGTH('qc_subpart_record', 'order_no') IS NULL |
|
||||
BEGIN |
|
||||
ALTER TABLE qc_subpart_record ADD order_no NVARCHAR(100) NULL; |
|
||||
END; |
|
||||
|
|
||||
IF COL_LENGTH('qc_subpart_record', 'resource_desc') IS NULL |
|
||||
BEGIN |
|
||||
ALTER TABLE qc_subpart_record ADD resource_desc NVARCHAR(200) NULL; |
|
||||
END; |
|
||||
|
|
||||
IF COL_LENGTH('qc_subpart_record', 'item_no') IS NULL |
|
||||
BEGIN |
|
||||
ALTER TABLE qc_subpart_record ADD item_no NVARCHAR(50) NULL; |
|
||||
END; |
|
||||
|
|
||||
IF COL_LENGTH('qc_subpart_record', 'item_desc') IS NULL |
|
||||
BEGIN |
|
||||
ALTER TABLE qc_subpart_record ADD item_desc NVARCHAR(200) NULL; |
|
||||
END; |
|
||||
|
|
||||
IF COL_LENGTH('qc_subpart_record', 'work_center_no') IS NULL |
|
||||
BEGIN |
|
||||
ALTER TABLE qc_subpart_record ADD work_center_no NVARCHAR(100) NULL; |
|
||||
END; |
|
||||
|
|
||||
IF COL_LENGTH('qc_subpart_record', 'bom_rev_no') IS NULL |
|
||||
BEGIN |
|
||||
ALTER TABLE qc_subpart_record ADD bom_rev_no NVARCHAR(50) NULL; |
|
||||
END; |
|
||||
|
|
||||
/* 11. 历史数据回填:按 site + seq_no 回填工单号、设备名称 */ |
|
||||
;WITH source_data AS ( |
|
||||
SELECT |
|
||||
r.id, |
|
||||
a.orderno AS orderNo, |
|
||||
a.itemno AS itemNo, |
|
||||
c.operation_desc AS itemDesc, |
|
||||
a.s_workcenterno AS workCenterNo, |
|
||||
d.bomrevno AS bomRevNo, |
|
||||
CAST(a.s_scheduleddate AS DATE) AS scheduledDate, |
|
||||
eo.ObjectDesc AS resourceDesc, |
|
||||
ROW_NUMBER() OVER ( |
|
||||
PARTITION BY r.id |
|
||||
ORDER BY ISNULL(a.update_date, a.create_date) DESC, a.seqno DESC |
|
||||
) AS rn |
|
||||
FROM qc_subpart_record r WITH (NOLOCK) |
|
||||
INNER JOIN soscheduledrouting a WITH (NOLOCK) |
|
||||
ON a.site = r.site |
|
||||
AND a.seqno = r.seq_no |
|
||||
LEFT JOIN so_routing c WITH (NOLOCK) |
|
||||
ON c.site = a.site |
|
||||
AND c.order_no = a.orderno |
|
||||
AND c.item_no = a.itemno |
|
||||
LEFT JOIN shoporder d WITH (NOLOCK) |
|
||||
ON d.site = a.site |
|
||||
AND d.orderno = a.orderno |
|
||||
LEFT JOIN eam_object eo WITH (NOLOCK) |
|
||||
ON eo.site = a.site |
|
||||
AND (eo.ResourceID = a.s_resourceid OR eo.ObjectID = a.s_resourceid) |
|
||||
WHERE r.del_flag = 'N' |
|
||||
) |
|
||||
UPDATE r |
|
||||
SET |
|
||||
order_no = CASE |
|
||||
WHEN ISNULL(LTRIM(RTRIM(r.order_no)), '') = '' THEN ISNULL(s.orderNo, '') |
|
||||
ELSE r.order_no |
|
||||
END, |
|
||||
item_no = CASE |
|
||||
WHEN ISNULL(LTRIM(RTRIM(r.item_no)), '') = '' THEN ISNULL(s.itemNo, '') |
|
||||
ELSE r.item_no |
|
||||
END, |
|
||||
item_desc = CASE |
|
||||
WHEN ISNULL(LTRIM(RTRIM(r.item_desc)), '') = '' THEN ISNULL(s.itemDesc, '') |
|
||||
ELSE r.item_desc |
|
||||
END, |
|
||||
work_center_no = CASE |
|
||||
WHEN ISNULL(LTRIM(RTRIM(r.work_center_no)), '') = '' THEN ISNULL(s.workCenterNo, '') |
|
||||
ELSE r.work_center_no |
|
||||
END, |
|
||||
bom_rev_no = CASE |
|
||||
WHEN ISNULL(LTRIM(RTRIM(r.bom_rev_no)), '') = '' THEN ISNULL(s.bomRevNo, '') |
|
||||
ELSE r.bom_rev_no |
|
||||
END, |
|
||||
produce_date = CASE |
|
||||
WHEN r.produce_date IS NULL THEN s.scheduledDate |
|
||||
ELSE r.produce_date |
|
||||
END, |
|
||||
resource_desc = CASE |
|
||||
WHEN ISNULL(LTRIM(RTRIM(r.resource_desc)), '') = '' THEN ISNULL(s.resourceDesc, '') |
|
||||
ELSE r.resource_desc |
|
||||
END, |
|
||||
update_date = GETDATE() |
|
||||
FROM qc_subpart_record r |
|
||||
INNER JOIN source_data s |
|
||||
ON s.id = r.id |
|
||||
AND s.rn = 1 |
|
||||
WHERE r.del_flag = 'N' |
|
||||
AND ( |
|
||||
ISNULL(LTRIM(RTRIM(r.order_no)), '') = '' |
|
||||
OR ISNULL(LTRIM(RTRIM(r.item_no)), '') = '' |
|
||||
OR ISNULL(LTRIM(RTRIM(r.item_desc)), '') = '' |
|
||||
OR ISNULL(LTRIM(RTRIM(r.work_center_no)), '') = '' |
|
||||
OR ISNULL(LTRIM(RTRIM(r.bom_rev_no)), '') = '' |
|
||||
OR r.produce_date IS NULL |
|
||||
OR ISNULL(LTRIM(RTRIM(r.resource_desc)), '') = '' |
|
||||
); |
|
||||
|
|
||||
/* 9. 更新明细策略:先软删后重建 */ |
|
||||
UPDATE qc_subpart_record_detail |
|
||||
SET del_flag = 'Y' |
|
||||
WHERE site = :site |
|
||||
AND record_no = :recordNo |
|
||||
AND del_flag = 'N'; |
|
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue