Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions resources/queries/targetedms/InstrumentBilling.sql
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,5 @@ SELECT
((TIMESTAMPDIFF('SQL_TSI_HOUR', StartTime, EndTime) * Fee + ir.rateType.setupFee) * PercentPayment / 100) AS AmountBilled

FROM targetedms.InstrumentSchedule i
INNER JOIN targetedms.InstrumentRate ir ON i.Instrument = ir.Instrument
INNER JOIN targetedms.InstrumentUsagePayment iup ON i.Id = iup.InstrumentScheduleId
INNER JOIN targetedms.InstrumentUsagePayment iup ON i.Id = iup.InstrumentScheduleId
INNER JOIN targetedms.InstrumentRate ir ON i.Instrument = ir.Instrument AND iup.PaymentMethod.RateType = ir.rateType
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
-- Add FKs to Containers and delete orphaned rows
DELETE FROM targetedms.instrumentUsagePayment WHERE Container NOT IN (SELECT EntityId FROM core.Containers);
DELETE FROM targetedms.instrumentSchedule WHERE Container NOT IN (SELECT EntityId FROM core.Containers);
DELETE FROM targetedms.projectPaymentMethod WHERE Container NOT IN (SELECT EntityId FROM core.Containers);
DELETE FROM targetedms.projectResearcher WHERE Container NOT IN (SELECT EntityId FROM core.Containers);
DELETE FROM targetedms.msProject WHERE Container NOT IN (SELECT EntityId FROM core.Containers);
DELETE FROM targetedms.instrumentRate WHERE Container NOT IN (SELECT EntityId FROM core.Containers);
DELETE FROM targetedms.msInstrument WHERE Container NOT IN (SELECT EntityId FROM core.Containers);
DELETE FROM targetedms.paymentMethod WHERE Container NOT IN (SELECT EntityId FROM core.Containers);
DELETE FROM targetedms.rateType WHERE Container NOT IN (SELECT EntityId FROM core.Containers);

ALTER TABLE targetedms.instrumentUsagePayment ADD CONSTRAINT FK_InstrumentUsagePayment_Container FOREIGN KEY (Container) REFERENCES core.Containers(EntityId);
ALTER TABLE targetedms.msProject ADD CONSTRAINT FK_MSProject_Container FOREIGN KEY (Container) REFERENCES core.Containers(EntityId);
ALTER TABLE targetedms.projectResearcher ADD CONSTRAINT FK_ProjectResearcher_Container FOREIGN KEY (Container) REFERENCES core.Containers(EntityId);
ALTER TABLE targetedms.instrumentRate ADD CONSTRAINT FK_InstrumentRate_Container FOREIGN KEY (Container) REFERENCES core.Containers(EntityId);
ALTER TABLE targetedms.msInstrument ADD CONSTRAINT FK_MSInstrument_Container FOREIGN KEY (Container) REFERENCES core.Containers(EntityId);
ALTER TABLE targetedms.paymentMethod ADD CONSTRAINT FK_PaymentMethod_Container FOREIGN KEY (Container) REFERENCES core.Containers(EntityId);
ALTER TABLE targetedms.projectPaymentMethod ADD CONSTRAINT FK_ProjectPaymentMethod_Container FOREIGN KEY (Container) REFERENCES core.Containers(EntityId);
ALTER TABLE targetedms.instrumentSchedule ADD CONSTRAINT FK_InstrumentSchedule_Container FOREIGN KEY (Container) REFERENCES core.Containers(EntityId);
ALTER TABLE targetedms.rateType ADD CONSTRAINT FK_RateType_Container FOREIGN KEY (Container) REFERENCES core.Containers(EntityId);

-- Add a RateType column to paymentMethod, set its values (creating one if needed), and make it not null
ALTER TABLE targetedms.paymentMethod ADD COLUMN RateType INT;
ALTER TABLE targetedms.paymentMethod ADD CONSTRAINT FK_PaymentMethod_RateType FOREIGN KEY (RateType) REFERENCES targetedms.RateType(Id);

UPDATE targetedms.paymentMethod pm SET RateType = (SELECT MIN(Id) FROM targetedms.RateType rt WHERE rt.Container = pm.Container);

INSERT INTO targetedms.RateType (Name, Container)
SELECT DISTINCT 'Default', Container FROM targetedms.paymentMethod WHERE RateType IS NULL;

UPDATE targetedms.paymentMethod pm SET RateType = (SELECT MIN(Id) FROM targetedms.RateType rt WHERE rt.Container = pm.Container) WHERE RateType IS NULL;

ALTER TABLE targetedms.paymentMethod ALTER COLUMN RateType SET NOT NULL;
1 change: 1 addition & 0 deletions resources/schemas/targetedms.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1823,6 +1823,7 @@
<inputType>text</inputType>
</column>
<column columnName="UWBudgetNumber"/>
<column columnName="RateType"/>
<column columnName="budgetExpirationDate"/>
<column columnName="PONumber"/>
<column columnName="contactNameFirst"/>
Expand Down
35 changes: 9 additions & 26 deletions src/org/labkey/targetedms/TargetedMSListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,29 +15,19 @@
*/
package org.labkey.targetedms;

import org.jetbrains.annotations.NotNull;
import org.labkey.api.data.Container;
import org.labkey.api.data.ContainerManager;
import org.labkey.api.data.SqlExecutor;
import org.labkey.api.security.User;
import org.labkey.targetedms.parser.speclib.LibSpectrumReader;

import java.beans.PropertyChangeEvent;
import java.util.Collection;
import java.util.Collections;

/**
* User: vsharma
* Date: 8/22/2014
* Time: 3:22 PM
*/
public class TargetedMSListener implements ContainerManager.ContainerListener
{
@Override
public void containerCreated(Container c, User user)
{
}

@Override
public void containerDeleted(Container c, User user)
{
Expand Down Expand Up @@ -71,22 +61,15 @@ public void containerDeleted(Container c, User user)

new SqlExecutor(TargetedMSManager.getSchema()).execute("DELETE FROM " + TargetedMSManager.getTableInfoQCEmailNotifications() + " WHERE Container = ?", c);
new SqlExecutor(TargetedMSManager.getSchema()).execute("DELETE FROM " + TargetedMSManager.getTableInfoInstrumentNickname() + " WHERE Container = ?", c);
}

@Override
public void containerMoved(Container c, Container oldParent, User user)
{
}

@NotNull
@Override
public Collection<String> canMove(Container c, Container newParent, User user)
{
return Collections.emptyList();
}

@Override
public void propertyChange(PropertyChangeEvent evt)
{
new SqlExecutor(TargetedMSManager.getSchema()).execute("DELETE FROM " + TargetedMSManager.getTableInfoInstrumentUsagePayment() + " WHERE Container = ?", c);
new SqlExecutor(TargetedMSManager.getSchema()).execute("DELETE FROM " + TargetedMSManager.getTableInfoInstrumentSchedule() + " WHERE Container = ?", c);
new SqlExecutor(TargetedMSManager.getSchema()).execute("DELETE FROM " + TargetedMSManager.getTableInfoProjectPaymentMethod() + " WHERE Container = ?", c);
new SqlExecutor(TargetedMSManager.getSchema()).execute("DELETE FROM " + TargetedMSManager.getTableInfoProjectResearcher() + " WHERE Container = ?", c);
new SqlExecutor(TargetedMSManager.getSchema()).execute("DELETE FROM " + TargetedMSManager.getTableInfoMSProject() + " WHERE Container = ?", c);
new SqlExecutor(TargetedMSManager.getSchema()).execute("DELETE FROM " + TargetedMSManager.getTableInfoInstrumentRate() + " WHERE Container = ?", c);
new SqlExecutor(TargetedMSManager.getSchema()).execute("DELETE FROM " + TargetedMSManager.getTableInfoMSInstrument() + " WHERE Container = ?", c);
new SqlExecutor(TargetedMSManager.getSchema()).execute("DELETE FROM " + TargetedMSManager.getTableInfoPaymentMethod() + " WHERE Container = ?", c);
new SqlExecutor(TargetedMSManager.getSchema()).execute("DELETE FROM " + TargetedMSManager.getTableInfoRateType() + " WHERE Container = ?", c);
}
}
10 changes: 10 additions & 0 deletions src/org/labkey/targetedms/TargetedMSManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,16 @@ public static SampleFileChromInfo getSampleFileChromInfo(int id, Container c)
return new TableSelector(getTableInfoSampleFileChromInfo(), new SimpleFilter(FieldKey.fromParts("Id"), id).addCondition(FieldKey.fromParts("Container"), c), null).getObject(SampleFileChromInfo.class);
}

public static TableInfo getTableInfoRateType()
{
return getSchema().getTable(TargetedMSSchema.TABLE_RATE_TYPE);
}

public static TableInfo getTableInfoInstrumentRate()
{
return getSchema().getTable(TargetedMSSchema.TABLE_INSTRUMENT_RATE);
}

public String getSchemaName()
{
return TargetedMSSchema.SCHEMA_NAME;
Expand Down
2 changes: 1 addition & 1 deletion src/org/labkey/targetedms/TargetedMSModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ public String getName()
@Override
public Double getSchemaVersion()
{
return 26.000;
return 26.001;
}

@Override
Expand Down
1 change: 1 addition & 0 deletions src/org/labkey/targetedms/query/SimpleTargetedMSTable.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public SimpleTargetedMSTable(String name, TargetedMSSchema schema, ContainerFilt
{
super(schema, TargetedMSSchema.getSchema().getTable(name), cf);
wrapAllColumns(true);
TargetedMSTable.fixupLookups(this);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,15 +111,15 @@ private void doInit() throws IOException, CommandException
InsertRowsCommand rateTypeInsert = new InsertRowsCommand("targetedms", "rateType");
rateTypeInsert.setRows(Arrays.asList(
Map.of("Name", "DefaultRate", "SetupFee", 50),
Map.of("Name", "BigSpenderRate", "SetupFee", 50)
Map.of("Name", "BigSpenderRate", "SetupFee", 66)
));
List<Map<String, Object>> rateTypes = rateTypeInsert.execute(createDefaultConnection(), getProjectName()).getRows();

InsertRowsCommand paymentMethodInsert = new InsertRowsCommand("targetedms", "paymentMethod");
paymentMethodInsert.setRows(Arrays.asList(
Map.of("UWBudgetNumber", "1111", "Name", PAYMENT_METHOD_1),
Map.of("UWBudgetNumber", "2222", "Name", PAYMENT_METHOD_2),
Map.of("UWBudgetNumber", "3333", "Name", PAYMENT_METHOD_3) // Intentionally not associated with a project
Map.of("UWBudgetNumber", "1111", "Name", PAYMENT_METHOD_1, "RateType", rateTypes.get(0).get("Id")),
Map.of("UWBudgetNumber", "2222", "Name", PAYMENT_METHOD_2, "RateType", rateTypes.get(1).get("Id")),
Map.of("UWBudgetNumber", "3333", "Name", PAYMENT_METHOD_3, "RateType", rateTypes.get(0).get("Id")) // Intentionally not associated with a project
));
List<Map<String, Object>> paymentMethods = paymentMethodInsert.execute(createDefaultConnection(), getProjectName()).getRows();

Expand All @@ -142,7 +142,9 @@ private void doInit() throws IOException, CommandException
InsertRowsCommand instrumentRateInsert = new InsertRowsCommand("targetedms", "instrumentRate");
instrumentRateInsert.setRows(Arrays.asList(
Map.of("Instrument", instruments.get(0).get("Id"), "rateType", rateTypes.get(0).get("Id"), "fee", 100),
Map.of("Instrument", instruments.get(1).get("Id"), "rateType", rateTypes.get(1).get("Id"), "fee", 110)
Map.of("Instrument", instruments.get(0).get("Id"), "rateType", rateTypes.get(1).get("Id"), "fee", 211),
Map.of("Instrument", instruments.get(1).get("Id"), "rateType", rateTypes.get(0).get("Id"), "fee", 100),
Map.of("Instrument", instruments.get(1).get("Id"), "rateType", rateTypes.get(1).get("Id"), "fee", 330)
));
List<Map<String, Object>> instrumentRates = instrumentRateInsert.execute(createDefaultConnection(), getProjectName()).getRows();
}
Expand Down Expand Up @@ -301,11 +303,12 @@ public void testSchedule() throws IOException, CommandException
waitAndClickAndWait(Locator.linkWithText("Instrument billing report"));
assertTextPresent("$950.00", 8);
// Two rows, one for each of the two payment methods
assertTextPresent("$3,680.00", 2);
assertTextPresent("$3,350.00", 1);
assertTextPresent("$10,956.00", 1);
assertTextPresent(PAYMENT_METHOD_1, 5);
assertTextPresent(PAYMENT_METHOD_2, 1);
// Verify the 40/60 split
assertTextPresent("$1,472.00", "$2,208.00");
// Verify the 40/60 split (though odd since they're different rate types)
assertTextPresent("$1,340.00", "$6,573.60");

goToDashboard();
clickAndWait(Locator.linkWithText("Monthly instrument billing report"));
Expand All @@ -314,7 +317,7 @@ public void testSchedule() throws IOException, CommandException
clickButton("Submit");
// Only some hours should be in the range for this billing report
assertTextPresent("17.0", 2);
assertTextPresent("$748.00", "$1,122.00");
assertTextPresent("$680.00", "$3,366.00");
}

private void attemptScheduleInsertExpectingFailure(Map<String, Object> row, String expected) throws IOException
Expand Down