Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
4938a5f
AMP-31085: Update TruBudget Branch with latest develolp
brianbrix Jan 19, 2026
14c7388
AMP-31085: Add missing trubudget section
brianbrix Jan 19, 2026
db5b378
AMP-31085: Ensure unique global setting
brianbrix Jan 19, 2026
24d7f8b
AMP-31085: Ensure unique global setting
brianbrix Jan 19, 2026
16fbd9a
AMP-31085: Ensure unique global setting
brianbrix Jan 19, 2026
ca3d2e8
AMP-31085: Make trubudget settings not internal
brianbrix Jan 20, 2026
941a663
AMP-31085: log trubudget login response
brianbrix Jan 20, 2026
1a61e61
AMP-31085: Get login token form cookie
brianbrix Jan 20, 2026
805f065
AMP-31085: Get login token form cookie
brianbrix Jan 20, 2026
32ab7ec
AMP-31085: Centralize trubudget auth logic
brianbrix Jan 20, 2026
75fa8b6
AMP-31085: Use secure trubudget password storage
brianbrix Jan 20, 2026
d847068
AMP-31085: Use secure trubudget password storage
brianbrix Jan 20, 2026
d1c3f08
AMP-31085: Project tags issue
brianbrix Jan 20, 2026
96c6c42
AMP-31085: Project components improvement
brianbrix Jan 21, 2026
178b95f
AMP-31085: Project components improvement
brianbrix Jan 21, 2026
128d8b2
AMP-31085: Webpack js issue
brianbrix Jan 21, 2026
5ea7004
AMP-31085: Webpack js issue
brianbrix Jan 21, 2026
9317983
AMP-31085: Null trnasction date issue
brianbrix Jan 21, 2026
734a979
AMP-31085: Components disappearing issue
brianbrix Jan 21, 2026
9ba90e5
AMP-31085: Components disappearing issue
brianbrix Jan 21, 2026
b975698
AMP-31085: Components disappearing issue
brianbrix Jan 21, 2026
e8ecc0a
AMP-31085: Components disappearing issue
brianbrix Jan 21, 2026
4ff505c
AMP-31085: Components disappearing issue
brianbrix Jan 21, 2026
da529c6
AMP-31085: Components disappearing issue
brianbrix Jan 21, 2026
168f687
AMP-31085: Missing file upload section under components
brianbrix Jan 22, 2026
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
10 changes: 9 additions & 1 deletion amp/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -178,9 +178,17 @@ COPY --from=compile-amp-filter /tmp/amp/TEMPLATE/ampTemplate/node_modules/amp-fi
COPY --from=compile-amp-settings /tmp/amp/TEMPLATE/ampTemplate/node_modules/amp-settings ../ampTemplate/node_modules/amp-settings
# Copy package files for dependency installation
COPY TEMPLATE/reampv2/package*.json ./
COPY TEMPLATE/reampv2/lerna.json ./
# Create packages directory structure and copy package.json files
RUN mkdir -p packages/user-manager packages/reampv2-app packages/ampoffline packages/container
COPY TEMPLATE/reampv2/packages/user-manager/package*.json ./packages/user-manager/
COPY TEMPLATE/reampv2/packages/reampv2-app/package*.json ./packages/reampv2-app/
COPY TEMPLATE/reampv2/packages/ampoffline/package*.json ./packages/ampoffline/
COPY TEMPLATE/reampv2/packages/container/package*.json ./packages/container/
# Install dependencies with clean install to avoid cache issues
RUN --mount=type=cache,target=/root/.npm \
--mount=type=ssh \
npm-install-with-retry.sh
npm ci --force || npm-install-with-retry.sh
# Copy source code after dependencies are installed
COPY TEMPLATE/reampv2 .
RUN npm run build \
Expand Down
15 changes: 15 additions & 0 deletions amp/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -601,6 +601,21 @@
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>io.projectreactor.netty</groupId>
<artifactId>reactor-netty</artifactId>
<version>1.0.35</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.28</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webflux</artifactId>
<version>5.3.28</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
Expand Down Expand Up @@ -73,12 +76,14 @@ private Pair<Map<String, String>, List<String>> loadCachedTranslations(

for (int i = 0; i < contents.size(); i += BATCH_SIZE) {
List<String> batchContents = contents.subList(i, Math.min(i + BATCH_SIZE, contents.size()));
translations.addAll(PersistenceManager.getSession()
.createCriteria(MachineTranslation.class)
.add(Restrictions.eq("sourceLanguage", srcLang))
.add(Restrictions.eq("targetLanguage", destLang))
.add(Restrictions.in("text", batchContents))
.list());
Session session = PersistenceManager.getRequestDBSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<MachineTranslation> criteriaQuery = builder.createQuery(MachineTranslation.class);
Root<MachineTranslation> root = criteriaQuery.from(MachineTranslation.class);
criteriaQuery.select(root).where(builder.equal(root.get("sourceLanguage"), srcLang),builder.equal(root.get("targetLanguage"), destLang),
builder.equal(root.get("text"), batchContents));

translations.addAll(session.createQuery(criteriaQuery).list());
}

return translations.stream().map(o -> ((MachineTranslation) o))
Expand Down Expand Up @@ -124,10 +129,13 @@ private Predicate<? super String> upToCodePoints(int charsAllowed) {
}

private int getCharactersUsedThisMonth() {
MachineTranslationCharactersUsed used = (MachineTranslationCharactersUsed) PersistenceManager.getSession()
.createCriteria(MachineTranslationCharactersUsed.class)
.add(Restrictions.eq("id", 1L))
.uniqueResult();
Session session = PersistenceManager.getRequestDBSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<MachineTranslationCharactersUsed> criteriaQuery = builder.createQuery(MachineTranslationCharactersUsed.class);
Root<MachineTranslationCharactersUsed> root = criteriaQuery.from(MachineTranslationCharactersUsed.class);
criteriaQuery.select(root).where(builder.equal(root.get("id"),1L));

MachineTranslationCharactersUsed used = session.createQuery(criteriaQuery).uniqueResult();
if (used != null && used.getMonth().equals(getCurrentMonth())) {
return used.getUsed();
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@
package org.dgfoundation.amp.onepager;

import org.apache.wicket.MetaDataKey;
import org.dgfoundation.amp.onepager.helper.EditorStore;
import org.dgfoundation.amp.onepager.helper.ResourceTranslationStore;
import org.dgfoundation.amp.onepager.helper.TemporaryActivityDocument;
import org.dgfoundation.amp.onepager.helper.TemporaryGPINiDocument;
import org.dgfoundation.amp.onepager.helper.*;
import org.digijava.kernel.startup.AmpSessionListener;
import org.digijava.module.aim.dbentity.*;

Expand All @@ -34,8 +31,11 @@ public final class OnePagerConst {


public static final MetaDataKey<HashSet<TemporaryActivityDocument>> RESOURCES_NEW_ITEMS = new MetaDataKey<HashSet<TemporaryActivityDocument>>(){};
public static final MetaDataKey<HashMap<String,HashSet<TemporaryComponentFundingDocument>>> COMPONENT_FUNDING_NEW_ITEMS = new MetaDataKey<HashMap<String,HashSet<TemporaryComponentFundingDocument>>>(){};
public static final MetaDataKey<HashSet<AmpActivityDocument>> RESOURCES_DELETED_ITEMS = new MetaDataKey<HashSet<AmpActivityDocument>>(){};
public static final MetaDataKey<HashMap<String,HashSet<AmpComponentFundingDocument>>> COMPONENT_FUNDING_DELETED_ITEMS = new MetaDataKey<HashMap<String,HashSet<AmpComponentFundingDocument>>>(){};
public static final MetaDataKey<HashSet<TemporaryActivityDocument>> RESOURCES_EXISTING_ITEM_TITLES = new MetaDataKey<HashSet<TemporaryActivityDocument>>(){};
public static final MetaDataKey<HashMap<String,HashSet<TemporaryComponentFundingDocument>>> COMPONENT_FUNDING_EXISTING_ITEM_TITLES = new MetaDataKey<HashMap<String,HashSet<TemporaryComponentFundingDocument>>>(){};
public static final MetaDataKey<HashMap<String,ResourceTranslationStore>> RESOURCES_TRANSLATIONS = new MetaDataKey<HashMap<String,ResourceTranslationStore>>(){};

public static final MetaDataKey<HashSet<TemporaryGPINiDocument>> GPI_RESOURCES_NEW_ITEMS = new MetaDataKey<HashSet<TemporaryGPINiDocument>>(){};
Expand Down Expand Up @@ -75,6 +75,7 @@ public final class OnePagerConst {

final static String toggleJS= "$('#%s').click(function(){$(this).siblings('div:first').slideToggle();return false;})";
final static String toggleChildrenJS = "$('#%s').find('a.slider').click(function(){$(this).siblings('div:first').slideToggle();return false;})";
final static String toggleChildrenJSComponent = "$('#%s').find('a.slider').click(function(){$(this).closest('tr.wicketFundingRowItem').find('#%s').slideToggle();return false;})";
final static String clickToggleJS= "$('#%s').siblings('div:first').slideToggle();";
final static String clickToggle2JS= "$('#%s').find('div:first').find('div:first').slideToggle();";
final static String toggleJSPM ="$(document).ready(function(){$('#%s').click(function(){$(this).siblings('div:first').slideToggle();return false;});})";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,10 @@ public static String getToggleJSPM(Component c)
{
return String.format(OnePagerConst.toggleJSPM, c.getMarkupId());
}
public static String getToggleChildrenJSComponentFunding(Component c, String id)
{
return String.format(OnePagerConst.toggleChildrenJSComponent,c.getMarkupId(),id);
}

/**
* Slide the section on refresh
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -937,18 +937,17 @@ private void verifySections(IModel<AmpActivityVersion> am, boolean alertIfDisbur
}

//Regional Funding
Set regionalSet = activity.getRegionalFundings();
Set<AmpRegionalFunding> regionalSet = activity.getRegionalFundings();
if (regionalSet != null){
HashSet<Long> verifiedRegions = new HashSet<Long>();
for (Iterator<AmpRegionalFunding> iterator = regionalSet.iterator(); iterator.hasNext(); ){
AmpRegionalFunding funding = iterator.next();
for (AmpRegionalFunding funding : regionalSet) {
if (funding.getRegionLocation() == null || verifiedRegions.contains(funding.getRegionLocation().getId()))
continue;
verifiedRegions.add(funding.getRegionLocation().getId());
verifySet(new PropertyModel<Set>(am, "regionalFundings"), alertIfDisbursementBiggerCommitments,
verifySet(new PropertyModel<>(am, "regionalFundings"), alertIfDisbursementBiggerCommitments,
alertIfExpenditureBiggerDisbursement, commitmentErrors, expenditureErrors, funding.getRegionLocation(),
TranslatorUtil.getTranslatedText(OnePager.REGIONAL_FUNDING_SECTION_NAME) + ": " +
funding.getRegionLocation().getAutoCompleteLabel());
funding.getRegionLocation().getAutoCompleteLabel());
}
}

Expand All @@ -957,7 +956,7 @@ private void verifySections(IModel<AmpActivityVersion> am, boolean alertIfDisbur
if (componentSet != null) {
for (AmpComponent component : componentSet) {
for (AmpComponentFunding funding : component.getFundings()) {
verifySet(new PropertyModel<Set>(component, "fundings"), alertIfDisbursementBiggerCommitments,
verifySet(new PropertyModel<>(component, "fundings"), alertIfDisbursementBiggerCommitments,
alertIfExpenditureBiggerDisbursement, commitmentErrors, expenditureErrors, funding.getComponent(),
TranslatorUtil.getTranslatedText(OnePager.COMPONENTS_SECTION_NAME) + ": " +
funding.getComponent().getTitle());
Expand All @@ -980,7 +979,7 @@ private void verifySet(PropertyModel<Set> detailsModel, boolean alertIfDisbursem
if (alertIfExpenditureBiggerDisbursement){
double expenditureSum = sumUp(details, Constants.EXPENDITURE, parent);
if (expenditureSum > disbursementSum)
expenditureErrors.put(itemIdentifier, Double.toString(expenditureSum) + " > " + Double.toString(disbursementSum));
expenditureErrors.put(itemIdentifier, expenditureSum + " > " + disbursementSum);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.digijava.module.aim.helper.GlobalSettingsConstants;
import org.digijava.module.aim.util.ComponentsUtil;
import org.digijava.module.aim.util.FeaturesUtil;
import org.digijava.module.categorymanager.util.CategoryConstants;

import java.util.List;
import java.util.Set;
Expand All @@ -35,9 +36,9 @@ public class AmpComponentsFormSectionFeature extends
public AmpComponentsFormSectionFeature(String id, String fmName,
final IModel<AmpActivityVersion> am) throws Exception {
super(id, fmName, am);
final PropertyModel<Set<AmpComponent>> setModel=new PropertyModel<Set<AmpComponent>>(am,"components");
final PropertyModel<Set<AmpComponent>> setModel= new PropertyModel<>(am, "components");
if (setModel.getObject() == null)
setModel.setObject(new TreeSet<AmpComponent>());
setModel.setObject(new TreeSet<>());
final ListEditor<AmpComponent> list;

IModel<List<AmpComponent>> listModel = OnePagerUtil.getReadOnlyListModelFromSetModel(setModel);
Expand Down Expand Up @@ -72,6 +73,7 @@ public void onClick(AjaxRequestTarget target) {
}

comp.setType(defaultType);
comp.setComponentStatus(CategoryConstants.COMPONENT_STATUS_OPEN.getAmpCategoryValueFromDB());
target.add(this.getParent());
target.appendJavaScript(OnePagerUtil.getToggleChildrenJS(this.getParent()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import org.digijava.module.categorymanager.util.CategoryConstants;

import java.util.Set;
import java.util.UUID;

/**
* @author aartimon@dginternational.org
Expand Down Expand Up @@ -62,12 +63,14 @@ public AmpComponentsFundingSubsectionFeature(String id,
public void onClick(AjaxRequestTarget target) {
AmpComponentFunding cf = new AmpComponentFunding();
cf.setAdjustmentType(CategoryConstants.ADJUSTMENT_TYPE_ACTUAL.getAmpCategoryValueFromDB());
cf.setComponentFundingStatus(CategoryConstants.COMPONENT_FUNDING_STATUS_OPEN.getAmpCategoryValueFromDB());
cf.setComponent(componentModel.getObject());
cf.setTransactionAmount(0d);
cf.setCurrency(CurrencyUtil.getWicketWorkspaceCurrency());
cf.setTransactionDate(null);
cf.setTransactionType(transactionType);
cf.setAmpComponentFundingId(null);
cf.setJustAnId(UUID.randomUUID().toString());


tableFeature.getEditorList().addItem(cf);
Expand Down
Loading