Change mapping between SumChargedEffort and OrderElement
A database refactoring has been added to make this change keep working and avoid lose any data. It was needed to use specific procedures for PostgreSQL and MySQL. FEA: ItEr76S14ConcurrencyProblemWorkReports
This commit is contained in:
parent
fcf8d44340
commit
7f5184b78d
4 changed files with 90 additions and 8 deletions
|
|
@ -108,7 +108,7 @@ public abstract class OrderElement extends IntegrationEntity implements
|
|||
|
||||
private Boolean dirtyLastAdvanceMeasurementForSpreading = true;
|
||||
|
||||
private SumChargedEffort sumChargedEffort = SumChargedEffort.create();
|
||||
private SumChargedEffort sumChargedEffort;
|
||||
|
||||
public OrderElementTemplate getTemplate() {
|
||||
return template;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e
|
||||
* Desenvolvemento Tecnolóxico de Galicia
|
||||
* Copyright (C) 2010-2011 Igalia, S.L.
|
||||
* Copyright (C) 2010-2012 Igalia, S.L.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
|
|
@ -33,6 +33,8 @@ import org.libreplan.business.workingday.EffortDuration;
|
|||
*/
|
||||
public class SumChargedEffort extends BaseEntity {
|
||||
|
||||
private OrderElement orderElement;
|
||||
|
||||
private EffortDuration directChargedEffort = EffortDuration.zero();
|
||||
|
||||
private EffortDuration indirectChargedEffort = EffortDuration.zero();
|
||||
|
|
@ -43,6 +45,10 @@ public class SumChargedEffort extends BaseEntity {
|
|||
return create(new SumChargedEffort());
|
||||
}
|
||||
|
||||
public OrderElement getOrderElement() {
|
||||
return orderElement;
|
||||
}
|
||||
|
||||
public void addDirectChargedEffort(EffortDuration directChargedEffort) {
|
||||
this.directChargedEffort = this.directChargedEffort
|
||||
.plus(directChargedEffort);
|
||||
|
|
|
|||
|
|
@ -92,4 +92,81 @@
|
|||
columnName="budget" defaultValueNumeric="0" />
|
||||
</changeSet>
|
||||
|
||||
<changeSet id="change-mapping-order-element-and-sum-charged-effort-postgresql"
|
||||
author="mrego">
|
||||
<preConditions onFail="MARK_RAN">
|
||||
<dbms type="postgresql" />
|
||||
</preConditions>
|
||||
<comment>Change mapping between OrderElement and SumChargedEffort in MySQL</comment>
|
||||
|
||||
<addColumn tableName="sum_charged_effort">
|
||||
<column name="order_element" type="BIGINT" />
|
||||
</addColumn>
|
||||
<createProcedure>
|
||||
CREATE OR REPLACE FUNCTION chageMappingBetweenOrderElementAndSumChargedEffort() RETURNS VOID AS $$
|
||||
DECLARE
|
||||
sce RECORD;
|
||||
BEGIN
|
||||
FOR sce IN SELECT sum_charged_effort_id AS id FROM order_element
|
||||
LOOP
|
||||
EXECUTE 'UPDATE sum_charged_effort '
|
||||
|| 'SET order_element '
|
||||
|| ' = (SELECT id FROM order_element '
|
||||
|| 'WHERE sum_charged_effort_id '
|
||||
|| ' = '
|
||||
|| quote_literal(sce.id)
|
||||
|| ') '
|
||||
|| 'WHERE id '
|
||||
|| ' = '
|
||||
|| quote_literal(sce.id);
|
||||
END LOOP;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
</createProcedure>
|
||||
<sql>SELECT chageMappingBetweenOrderElementAndSumChargedEffort()</sql>
|
||||
<addForeignKeyConstraint constraintName="sum_charged_effort_order_element_fkey"
|
||||
baseTableName="sum_charged_effort" baseColumnNames="order_element"
|
||||
referencedTableName="order_element" referencedColumnNames="id" />
|
||||
<dropColumn tableName="order_element" columnName="sum_charged_effort_id"/>
|
||||
</changeSet>
|
||||
|
||||
<changeSet id="change-mapping-order-element-and-sum-charged-effort-mysql"
|
||||
author="mrego">
|
||||
<preConditions onFail="MARK_RAN">
|
||||
<dbms type="mysql" />
|
||||
</preConditions>
|
||||
<comment>Change mapping between OrderElement and SumChargedEffort in PostgreSQL</comment>
|
||||
|
||||
<addColumn tableName="sum_charged_effort">
|
||||
<column name="order_element" type="BIGINT" />
|
||||
</addColumn>
|
||||
<sql>DROP PROCEDURE IF EXISTS chageMappingBetweenOrderElementAndSumChargedEffort</sql>
|
||||
<sql splitStatements="false">
|
||||
CREATE PROCEDURE chageMappingBetweenOrderElementAndSumChargedEffort()
|
||||
BEGIN
|
||||
DECLARE done INT DEFAULT FALSE;
|
||||
DECLARE sce_id INT;
|
||||
DECLARE cursor_sce_ids CURSOR FOR SELECT sum_charged_effort_id AS id FROM order_element;
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
||||
|
||||
OPEN cursor_sce_ids;
|
||||
|
||||
ids_loop: LOOP
|
||||
FETCH cursor_sce_ids INTO sce_id;
|
||||
IF done THEN
|
||||
LEAVE ids_loop;
|
||||
END IF;
|
||||
UPDATE sum_charged_effort SET order_element = (SELECT id FROM order_element WHERE sum_charged_effort_id = sce_id) WHERE id = sce_id;
|
||||
END LOOP;
|
||||
|
||||
CLOSE cursor_sce_ids;
|
||||
END;
|
||||
</sql>
|
||||
<sql>CALL chageMappingBetweenOrderElementAndSumChargedEffort()</sql>
|
||||
<addForeignKeyConstraint constraintName="sum_charged_effort_order_element_fkey"
|
||||
baseTableName="sum_charged_effort" baseColumnNames="order_element"
|
||||
referencedTableName="order_element" referencedColumnNames="id" />
|
||||
<dropColumn tableName="order_element" columnName="sum_charged_effort_id"/>
|
||||
</changeSet>
|
||||
|
||||
</databaseChangeLog>
|
||||
|
|
|
|||
|
|
@ -74,12 +74,8 @@
|
|||
column="scheduling_state_for_version_id" />
|
||||
</map>
|
||||
|
||||
<many-to-one name="sumChargedEffort"
|
||||
class="SumChargedEffort"
|
||||
column="sum_charged_effort_id"
|
||||
cascade="save-update, delete"
|
||||
unique="true"
|
||||
lazy="false" />
|
||||
<one-to-one name="sumChargedEffort" class="SumChargedEffort"
|
||||
cascade="delete" property-ref="orderElement" />
|
||||
|
||||
<joined-subclass name="OrderLineGroup" table="order_line_group">
|
||||
<key column="order_element_id"></key>
|
||||
|
|
@ -246,6 +242,9 @@
|
|||
</id>
|
||||
<version name="version" access="property" type="long" />
|
||||
|
||||
<many-to-one name="orderElement" column="order_element"
|
||||
class="OrderElement" cascade="none" unique="true" />
|
||||
|
||||
<property name="directChargedEffort" access="field"
|
||||
column="direct_charged_effort"
|
||||
type="org.libreplan.business.workingday.hibernate.EffortDurationType" />
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue