package com.constellio.app.modules.rm.ui.pages.decommissioning; import com.constellio.app.modules.rm.RMConfigs; import com.constellio.app.modules.rm.constants.RMPermissionsTo; import com.constellio.app.modules.rm.navigation.RMViews; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.services.decommissioning.DecommissioningSecurityService; import com.constellio.app.modules.rm.ui.pages.containers.edit.AddEditContainerPresenter; import com.constellio.app.modules.rm.wrappers.ContainerRecord; import com.constellio.app.modules.rm.wrappers.DecommissioningList; import com.constellio.app.ui.entities.RecordVO; import com.constellio.app.ui.entities.RecordVO.VIEW_MODE; import com.constellio.app.ui.framework.builders.RecordToVOBuilder; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.Transaction; import com.constellio.model.entities.records.wrappers.User; import java.util.Arrays; import java.util.List; import static com.constellio.app.ui.i18n.i18n.$; public class AddNewContainerPresenter extends AddEditContainerPresenter { private transient RMSchemasRecordsServices rmRecordsServices; private transient RMConfigs rmConfigs; String listId; public AddNewContainerPresenter(AddNewContainerView view) { super(view); } @Override public AddNewContainerPresenter forParams(String parameters) { container = new RecordToVOBuilder().build(newContainerRecord(), VIEW_MODE.FORM, view.getSessionContext()); listId = parameters; editMode = false; return this; } @Override public boolean canEditAdministrativeUnit() { return rmConfigs().areMixedContainersAllowed(); } @Override public boolean canEditDecommissioningType() { return false; } @Override public void saveButtonClicked(RecordVO recordVO) { DecommissioningList decommissioningList = rmRecordsServices().getDecommissioningList(listId); ContainerRecord container = rmRecordsServices().wrapContainerRecord(toRecord(recordVO)); if (!canEditAdministrativeUnit()) { container.setAdministrativeUnit(decommissioningList.getAdministrativeUnit()); } decommissioningList.addContainerDetailsFrom(Arrays.asList(container)); Transaction transaction = new Transaction().setUser(getCurrentUser()); transaction.addAll(container, decommissioningList); try { recordServices().execute(transaction); view.navigate().to(RMViews.class).displayDecommissioningList(listId); } catch (Exception e) { e.printStackTrace(); view.showErrorMessage($("AddNewContainerView.failedToSave")); } } @Override protected boolean hasPageAccess(String params, User user) { return true; } @Override protected List<String> getRestrictedRecordIds(String params) { return Arrays.asList(params); } @Override protected boolean hasRestrictedRecordAccess(String params, User user, Record restrictedRecord) { DecommissioningList decommissioningList = rmRecordsServices().wrapDecommissioningList(restrictedRecord); return user.has(RMPermissionsTo.PROCESS_DECOMMISSIONING_LIST).on(restrictedRecord) || new DecommissioningSecurityService(view.getCollection(), appLayerFactory).hasPermissionToCreateTransferOnList(decommissioningList, user); } private RMSchemasRecordsServices rmRecordsServices() { if (rmRecordsServices == null) { rmRecordsServices = new RMSchemasRecordsServices(view.getCollection(), appLayerFactory); } return rmRecordsServices; } private RMConfigs rmConfigs() { if (rmConfigs == null) { rmConfigs = new RMConfigs(modelLayerFactory.getSystemConfigurationsManager()); } return rmConfigs; } }