AddressCampaignValueMultiSelectedPageRest.ktAnnotations: RequestMapping, PostConstruct, RestController, Autowired
Classes: AddressCampaignValueMultiSelectedPageRest
Supertype(s): AbstractMultiSelectedPage
Functions (5): getId, getTitleKey, postConstruct, fillForm, proceedMassUpdate
Properties (18): addressDao, addressCampaignValueDao, addressCampaignValuePagesRest, layoutContext, lc, addressCampaign, values, params, addressCampaign, addressCampaignDO, realCampaignValueIds, addressIdsFromNegative, longId, existingCampaignValues, addressCampaignValue, addresses, addressCampaignValueDO, addressCampaignValue
Imports: 17 packages
Package: org.projectforge.plugins.marketing.rest
package org.projectforge.plugins.marketing.rest
import jakarta.annotation.PostConstruct
import jakarta.servlet.http.HttpServletRequest
import org.projectforge.business.address.AddressDao
import org.projectforge.framework.persistence.api.EntityCopyStatus
import org.projectforge.plugins.marketing.AddressCampaignValueDO
import org.projectforge.plugins.marketing.AddressCampaignValueDao
import org.projectforge.plugins.marketing.dto.AddressCampaignValue
import org.projectforge.rest.config.Rest
import org.projectforge.rest.multiselect.AbstractMultiSelectedPage
import org.projectforge.rest.multiselect.MassUpdateContext
import org.projectforge.rest.multiselect.MassUpdateParameter
import org.projectforge.ui.*
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import java.io.Serializable
/**
* Mass update after selection.
*/
@RestController
@RequestMapping("${Rest.URL}/addressCampaignValue${AbstractMultiSelectedPage.URL_SUFFIX_SELECTED}")
class AddressCampaignValueMultiSelectedPageRest : AbstractMultiSelectedPage<AddressCampaignValue>() {
@Autowired
private lateinit var addressDao: AddressDao
@Autowired
private lateinit var addressCampaignValueDao: AddressCampaignValueDao
@Autowired
private lateinit var addressCampaignValuePagesRest: AddressCampaignValuePagesRest
override val layoutContext: LayoutContext = LayoutContext(AddressCampaignValueDO::class.java)
override fun getId(obj: AddressCampaignValue): Long {
return obj.id ?: obj.addressId ?: -1
}
override fun getTitleKey(): String {
return "plugins.marketing.addressCampaignValue.multiselected.title"
}
@PostConstruct
private fun postConstruct() {
pagesRest = addressCampaignValuePagesRest
}
override fun fillForm(
request: HttpServletRequest,
layout: UILayout,
massUpdateData: MutableMap<String, MassUpdateParameter>,
selectedIds: Collection<Serializable>?,
variables: MutableMap<String, Any>,
) {
/*
// Heading
gridBuilder.newFormHeading(
getString("plugins.marketing.addressCampaignValue") + ": " + data.getAddressCampaign().getTitle());
*/
val lc = LayoutContext(AddressCampaignValueDO::class.java)
val addressCampaign = addressCampaignValuePagesRest.getAddressCampaign(request)
if (addressCampaign != null) {
layout.add(UIReadOnlyField(label = "plugins.marketing.addressCampaign", value = addressCampaign.title))
}
val values = addressCampaign?.values?.map { UISelectValue(it, it) }
layout.add(
createInputFieldRow(
"value",
UISelect("value.textValue", values = values),
massUpdateData,
showDeleteOption = true
)
)
createAndAddFields(lc, massUpdateData, layout, "comment", showAppendOption = true)
}
override fun proceedMassUpdate(
request: HttpServletRequest,
selectedIds: Collection<Serializable>,
massUpdateContext: MassUpdateContext<AddressCampaignValue>,
): ResponseEntity<*>? {
val params = massUpdateContext.massUpdateParams
val addressCampaign = addressCampaignValuePagesRest.getAddressCampaign(request)
params["value"]?.let { param ->
param.textValue?.let { value ->
if (!value.isEmpty() && addressCampaign?.values?.contains(value) != true) {
return showValidationErrors(
ValidationError(
"plugins.marketing.addressCampaignValue.error.unknownValue",
"value.textValue"
)
)
}
}
}
val addressCampaignDO = addressCampaignValuePagesRest.getAddressCampaignDO(request)
if (addressCampaignDO == null) {
return showValidationErrors(
ValidationError("plugins.marketing.addressCampaignValue.error.addressOrCampaignNotGiven")
)
}
// Split selected IDs into positive (existing campaign values) and negative (address IDs)
val realCampaignValueIds = mutableListOf<Long>()
val addressIdsFromNegative = mutableListOf<Long>()
selectedIds.forEach { id ->
val longId = (id as? Long) ?: (id as? String)?.toLongOrNull()
if (longId != null) {
if (longId > 0) {
realCampaignValueIds.add(longId)
} else {
// Negative ID = synthetic ID, convert back to addressId
// ... (truncated, total 207 lines)
868d6abb7 2025 -> 2026 961941b12 WIP: Address campaign values 03502905d MarkdownBuilder escapes now the input strings. 8548c532b AG grid: multilineCell-Renderer, WIP address campaigns 4827c5769 WIP: multi selection (address and all)