EN · DE · RU · FR · ES

#201: AddressCampaignValueMultiSelectedPageRest.kt

plugins/org.projectforge.plugins.marketing/src/main/kotlin/org/projectforge/plugins/marketing/rest/AddressCampaignValueMultiSelectedPageRest.kt Typ: Kotlin · Rolle: Plugin-Registrierung · Quelle: plugins/org.projectforge.plugins.marketing/src/main/kotlin/org/projectforge/plugins/marketing/rest/AddressCampaignValueMultiSelectedPageRest.kt 229 Zeilen · 172 Code · 35 Kommentare · 22 leer
REST-API-Endpunkt für AddressCampaignValueMultiSelected. Verarbeitet HTTP-Anfragen und gibt JSON-Antworten für das React-Frontend zurück.

Codestruktur

Annotationen: RequestMapping, PostConstruct, RestController, Autowired

Klassen: AddressCampaignValueMultiSelectedPageRest

Supertyp(en): AbstractMultiSelectedPage

Funktionen (5): getId, getTitleKey, postConstruct, fillForm, proceedMassUpdate

Eigenschaften (18): addressDao, addressCampaignValueDao, addressCampaignValuePagesRest, layoutContext, lc, addressCampaign, values, params, addressCampaign, addressCampaignDO, realCampaignValueIds, addressIdsFromNegative, longId, existingCampaignValues, addressCampaignValue, addresses, addressCampaignValueDO, addressCampaignValue

Importe: 17 Pakete

Paket: org.projectforge.plugins.marketing.rest

Quellcode (gekürzt)

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


/**
 * Massenaktualisierung nach Auswahl.
 */
@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>,
    ) {
        /*
              // Überschrift
          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")
            )
        }

        // Teilen Sie die ausgewählten IDs in positive (vorhandene Kampagnenwerte) und negative (Adress-IDs) auf
        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 = synthetische ID, zurück in addressId umwandeln
// ... (gekürzt, insgesamt 207 Zeilen)

Git-Verlauf

868d6abb7 2025 -> 2026
961941b12 WIP: Adresskampagnenwerte
03502905d MarkdownBuilder maskiert jetzt die Eingabezeichenfolgen.
8548c532b AG grid: multilineCell-Renderer, WIP Adresskampagnen
4827c5769 WIP: Mehrfachauswahl (Adresse und alle)