<%@language = "javascript" %>
<% /*
    $Revision$
    $Id$

    File:           PRS/prs_transfer_save.asp
    Description:    Overzetten (transfer) verplichtingen van een persoon.
                    Verplichtingen van een persoon worden overgezet naar een ander persoon
                    In prs_transfer.asp is de andere persoon gekozen.
    Parameters:
    Context:        Save code van prs_transfer.asp
    Note:
*/ %>

<%
var JSON_Result = true;
%>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/save2db.inc" -->
<!-- #include file="../bez/bez.inc" -->
<!-- #include file="prs.inc" -->
<!-- #include file="../Shared/Suggest/uitvoerendeFilter.inc" -->

<%
protectRequest.validateToken();
var prs_key = getFParamInt("prs_key");
var prs_key_current = getFParamInt("prs_key_current");
var item_keys = getFParamIntArray("item_keys");
var messagecodes = getFParam('messagecodes');

// De functie checkAutorisation(autfunction) geeft een Response.End indien er geen autorisatie voor autfunction wordt gevonden
var authparams = user.checkAutorisation("WEB_PRSMAN");
var prsauthparams = prs.checkAutorisation(prs_key);
user.auth_required_or_abort(prsauthparams.writeuse);

messagecodes = messagecodes.split(",");

result = { success: true};
var sql = "";
// Elke verplichting stuk voor stuk overzetten naar opvolger, afhankelijk van fac_message_code
for (var i = 0; i < item_keys.length; i++)
{
   var paction = null; // track action
  switch (messagecodes[i])
  {
    case "PRS_OPENST_MELDING":     // Aanvrager openstaande melding overzetten
                                   sql = "UPDATE mld_melding SET"
                                       + " prs_perslid_key = " + prs_key
                                       + " WHERE mld_melding_key = " + item_keys[i];
                                   paction = "MLDUPD";
                                   break;
    case "PRS_OPENST_OPDRACHT":    // Interne uitvoerder van opdracht overzetten
                                   // Gegevens opdracht ophalen.
                                   var sqlm = "SELECT sm.mld_ins_discipline_key"
                                            + "     , m.mld_alg_locatie_key"
                                            + "     , m.mld_alg_onroerendgoed_keys"
                                            + "  FROM mld_opdr o"
                                            + "     , mld_melding m"
                                            + "     , mld_stdmelding sm"
                                            + " WHERE o.mld_melding_key = m.mld_melding_key"
                                            + "   AND m.mld_stdmelding_key = sm.mld_stdmelding_key"
                                            + "   AND o.mld_opdr_key = " + item_keys[i];
                                   var oRsm = Oracle.Execute(sqlm);
                                   var disc_key = oRsm("mld_ins_discipline_key").Value;
                                   var loc_key = oRsm("mld_alg_locatie_key").Value;
                                   var onrgoed_key = oRsm("mld_alg_onroerendgoed_keys").Value;

                                   // ALG en PRS scope bepalen.
                                   // Dit wordt bij uitvoerende selector (FCLTuitvoerendeselector) al bepaald (zie Shared/Suggest/uitvoerendeFilter.inc).
                                   // Het perslid gedeelte gebruik ik hier zodat er geen dubbele code ontstaat.
                                   var sql_mldord = getFiltClauseUitvoerende("",
                                                                             {onrgoed_key: onrgoed_key,
                                                                              loc_key: loc_key,
                                                                              disc_key: disc_key,
                                                                              autlevel: authparams.PRSwritelevel}).perslid

                                   sql = "UPDATE mld_opdr SET"
                                       + " mld_uitvoerende_keys = " + prs_key
                                       + " WHERE mld_opdr_key = " + item_keys[i]
                                       + "   AND " + prs_key + " IN (SELECT p.prs_perslid_key"
                                       + "                             FROM prs_perslid p"
                                       + "                            WHERE 1 = 1"
                                       +                             sql_mldord + ")";

                                   paction = "ORDUPD";
                                   break;
    case "PRS_OPENST_BESTELLING":  // Aanvrager openstaande bestelling overzetten
                                   sql = "UPDATE bes_bestelling SET"
                                       + "  prs_perslid_key      = CASE WHEN prs_perslid_key = " + prs_key_current
                                       + "                              THEN " + prs_key
                                       + "                              ELSE prs_perslid_key"
                                       + "                         END,"
                                       + "  prs_perslid_key_voor = CASE WHEN prs_perslid_key_voor = " + prs_key_current
                                       + "                              THEN " + prs_key
                                       + "                              ELSE prs_perslid_key_voor"
                                       + "                         END"
                                       + " WHERE bes_bestelling_key = " + item_keys[i];
                                   paction = "BESUPD";
                                   break;
    case "PRS_BEZIT_OBJECT":       // Bezitter van een object overzetten
                                   sql = "UPDATE ins_deel SET"
                                       + " ins_alg_ruimte_key = " + prs_key
                                       + " WHERE ins_deel_key = " + item_keys[i]
                                       + " AND ins_alg_ruimte_type = 'P'";
                                   paction = "INSUPD";
                                   break;
    case "PRS_BEHEERT_OBJECT":     // Beheerder van een object overzetten
                                   sql = "UPDATE ins_deel SET"
                                       + " prs_perslid_key_beh = " + prs_key
                                       + " WHERE ins_deel_key = " + item_keys[i];
                                   paction = "INSUPD";
                                   break;
    case "PRS_OPENST_RES_R":
    case "PRS_OPENST_RES_V":
    case "PRS_OPENST_RES_C":       // Gastheer van een reservering overzetten
                                   sql = "UPDATE res_rsv_ruimte SET"
                                       + " res_rsv_ruimte_host_key = " + prs_key
                                       + " WHERE res_rsv_ruimte_key = " + item_keys[i]
                                       + " AND res_rsv_ruimte_host_key = " + prs_key_current;
                                   paction = "RESUPD"; // let wel: de notificatie gaat naar de oude *contactpersoon*
                                   break;
    case "PRS_OPENST_RES_RC":
    case "PRS_OPENST_RES_VC":
    case "PRS_OPENST_RES_CC":      // Contactpersoon van een reservering overzetten
                                   sql = "UPDATE res_rsv_ruimte SET"
                                       + " res_rsv_ruimte_contact_key = " + prs_key
                                       + " WHERE res_rsv_ruimte_key = " + item_keys[i]
                                       + " AND res_rsv_ruimte_contact_key = " + prs_key_current;
                                   paction = "RESUPD";
                                   break;
    case "PRS_AFSPRAAK_H":         // Gastheer van een afspraak overzetten
                                   sql = "UPDATE bez_afspraak SET"
                                       + " bez_afspraak_host_key = " + prs_key
                                       // bez_afspraak_gastheer wordt automatisch gevuld met de juiste gastheer door trigger BEZ_T_BEZ_AFSPRAAK_B_IU
                                       + " WHERE bez_afspraak_key = " + item_keys[i];
                                   paction = "BEZMUT";
                                   break;
    case "PRS_AFSPRAAK_C":         // Contactpersoon van een afspraak overzetten
                                   sql = "UPDATE bez_afspraak SET"
                                       + " bez_afspraak_contact_key = " + prs_key
                                       + " WHERE bez_afspraak_key = " + item_keys[i];
                                   paction = "BEZMUT";
                                   break;
    case "PRS_BUDGETHOUDER_VAN":   // Budgethouders kostenplaats overzetten
                                   sql = "UPDATE prs_kostenplaats SET"
                                       + " prs_perslid_key = " + prs_key
                                       + " WHERE prs_kostenplaats_key = " + item_keys[i];
                                   // er is geen tracking op kostenplaats.
                                   break;
    case "PRS_FIATTEUR_GROEP1":    // fiatteurs 1 kostenplaatsgroep overzetten
                                   sql = "UPDATE prs_kostenplaatsgrp SET"
                                       + " prs_perslid_key = " + prs_key
                                       + " WHERE prs_kostenplaatsgrp_key = " + item_keys[i];
                                   // er is geen tracking op kostenplaatsgroep.
                                   break;
    case "PRS_FIATTEUR_GROEP2":    // fiatteurs 2 kostenplaatsgroep overzetten
                                   sql = "UPDATE prs_kostenplaatsgrp SET"
                                       + " prs_kostenplaatsgrp_fiat2_key = " + prs_key
                                       + " WHERE prs_kostenplaatsgrp_key = " + item_keys[i];
                                   // er is geen tracking op kostenplaatsgroep.
                                   break;
    case "PRS_FIATTEUR_GROEP3":    // fiatteurs 3 kostenplaatsgroep overzetten
                                   sql = "UPDATE prs_kostenplaatsgrp SET"
                                       + " prs_kostenplaatsgrp_fiat3_key = " + prs_key
                                       + " WHERE prs_kostenplaatsgrp_key = " + item_keys[i];
                                   // er is geen tracking op kostenplaatsgroep.
                                   break;
    case "CNT_CONTRACT_BEH":       // Beheerders contracten overzetten
                                   sql = "UPDATE cnt_contract SET"
                                       + " prs_perslid_key_beh = " + prs_key
                                       + " WHERE cnt_contract_key = " + item_keys[i]
                                       + " AND cnt_contract_verwijder IS NULL";
                                   break;
    case "CNT_CONTRACT_EIG":       // Contractmanager contracten overzetten
                                   sql = "UPDATE cnt_contract SET"
                                       + " prs_perslid_key_eig = " + prs_key
                                       + " WHERE cnt_contract_key = " + item_keys[i]
                                       + " AND cnt_contract_verwijder IS NULL";
                                   break;
    case "CNT_CONTRACT_PARTIJ":    // Contractpartij (persoon) contracten overzetten
                                   sql = "UPDATE cnt_contract SET"
                                       + " cnt_prs_perslid_key = " + prs_key
                                       + " WHERE cnt_contract_key = " + item_keys[i]
                                       + " AND cnt_contract_verwijder IS NULL";
                                   break;
    default:                       // De rest overslaan
                                   // PRS_OPENST_OPDRACHT (uitvoerende opdracht)
                                   // PRS_FIATTEUR_VOOR (fiateeurs), deze komt ook niet voor in prs_v_verplichting
                                   break;
  }

  if (paction)
  {
    var oRs1 = Oracle.Execute("SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key="+prs_key_current);
    var oRs2 = Oracle.Execute("SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key="+prs_key);
    var text = L('lcl_prs_obligation_transferred').format(oRs1("prs_perslid_naam_full").Value, oRs2("prs_perslid_naam_full").Value);
    oRs1.Close();
    oRs2.Close();
    shared.trackaction(paction, item_keys[i], text);
  }

  if (sql)
  {
      var err = Oracle.Execute(sql, true);
      if (err.friendlyMsg)
      {
          result.message = err.friendlyMsg;
          result.success = false;
      }
  }
}

Response.Write(JSON.stringify(result));
%>
<% ASPPAGE_END(); %>
