angular.module('fasit')
.directive('fbDokumentKoepareParagraf', [function () {
var link = function (scope: fb.IFbDokumentKoepareParagrafScope, element: ng.IAugmentedJQuery, Attrs: ng.IAttributes) {
if (!scope.dokumentVaerdeSuffix) {
scope.dokumentVaerdeSuffix = ''
}
var getPersonNamn = function (personer) {
var personNamn = _.reduce(personer, function (memo: string, person: any) {
return (memo !== '' ? memo + ' & ' : '') + person.Namn;
}, '');
return personNamn;
};
var checkAerAdressSamma = function (adress1, adress2) {
return adress1
&& adress2
&& adress1.AdressText === adress2.AdressText
//&& adress1.FortsaettningsAdress === adress2.FortsaettningsAdress
&& adress1.GatuAdress === adress2.GatuAdress
&& adress1.Postnummer === adress2.Postnummer
&& adress1.Postort === adress2.Postort;
};
var getParagrafTextFromPerson = function (person, roll: string, index) {
var persNum = person.Personnummer ? person.Personnummer.replace("-", "") : index;
var personID = person.PersonId ? person.PersonId : persNum;
var html;
if (scope.paragrafTyp === 'Namn') {
html = '';
} else {
html = '' +
'
' +
'' +
'
' +
'' +
'';
}
var paragrafText = {
ParagrafTextId: personID,
ParagrafId: -1,
Visningstext: person.Namn,
Text: html
}
return paragrafText;
};
var getParagrafTextFromPersonAlla = function (personNamn) {
var html;
if (scope.paragrafTyp === 'Namn') {
html = '';
} else {
html = '' +
'
' +
'' +
'
' +
'' +
'';
}
var paragrafText = {
ParagrafTextId: 'Alla',
ParagrafId: -1,
Visningstext: personNamn,
Text: html
}
return paragrafText;
};
scope.$watch('dokumentData', function () {
if (!scope.dokumentData) {
return;
}
var koepareParagraf = {
ParagrafId: -1,
ParagrafNamn: 'KoepareParagraf',
ParagrafTextRO: {}
};
var personData = {};
var i;
var incr = 0;
var fullmaktIndex;
var fullmakt;
var containsPerson = function (kontakt: any) {
var ret = false;
angular.forEach(personData, function (person: any) {
if (person.PersonId === kontakt.PersonId) {
ret = true;
}
});
return ret;
};
if (scope.dokumentData.Koepare) {
var allaKoeparesAdress = scope.dokumentData.Koepare.length > 0 ? scope.dokumentData.Koepare[0].Adress : null;
var aerAllaKoeparesAdressSamma = true;
for (i = 0; i < scope.dokumentData.Koepare.length; i++) {
if (i > 0
&& !checkAerAdressSamma(scope.dokumentData.Koepare[i].Adress, allaKoeparesAdress)) {
aerAllaKoeparesAdressSamma = false;
}
koepareParagraf.ParagrafTextRO[scope.dokumentData.Koepare[i].PersonId] = getParagrafTextFromPerson(scope.dokumentData.Koepare[i], 'Köpare', i);
personData['p' + scope.dokumentData.Koepare[i].PersonId] = scope.dokumentData.Koepare[i];
if (scope.extraParter === 'true') {
if (scope.dokumentData.Koepare[i].Doedsbodelaegare) {
for (var j = 0; j < scope.dokumentData.Koepare[i].Doedsbodelaegare.length; j++) {
incr++;
var doedsboPersId = scope.dokumentData.Koepare[i].Doedsbodelaegare[j].PersonId;
koepareParagraf.ParagrafTextRO[doedsboPersId] = getParagrafTextFromPerson(scope.dokumentData.Koepare[i].Doedsbodelaegare[j], 'Köpare', ("" + i + j + incr));
personData['p' + doedsboPersId] = scope.dokumentData.Koepare[i].Doedsbodelaegare[j];
if (scope.fullmaktTagare === 'true' && scope.dokumentData.Koepare[i].Doedsbodelaegare[j].Fullmakt) {
incr++;
fullmaktIndex = "" + i + incr;
fullmakt = { Namn: scope.dokumentData.Koepare[i].Doedsbodelaegare[j].Fullmakt };
koepareParagraf.ParagrafTextRO[fullmaktIndex] = getParagrafTextFromPerson(fullmakt, 'Köpare', fullmaktIndex);
personData['p' + fullmaktIndex] = fullmakt;
}
}
}
if (scope.dokumentData.Koepare[i].Firmatecknare) {
for (var k = 0; k < scope.dokumentData.Koepare[i].Firmatecknare.length; k++) {
incr++;
var firmaPersId = scope.dokumentData.Koepare[i].Firmatecknare[k].PersonId;
koepareParagraf.ParagrafTextRO[firmaPersId] = getParagrafTextFromPerson(scope.dokumentData.Koepare[i].Firmatecknare[k], 'Köpare', ("" + i + k + incr));
personData['p' + firmaPersId] = scope.dokumentData.Koepare[i].Firmatecknare[k];
if (scope.fullmaktTagare === 'true' && scope.dokumentData.Koepare[i].Firmatecknare[k].Fullmakt) {
incr++;
fullmaktIndex = "" + i + incr;
fullmakt = { Namn: scope.dokumentData.Koepare[i].Firmatecknare[k].Fullmakt };
koepareParagraf.ParagrafTextRO[fullmaktIndex] = getParagrafTextFromPerson(fullmakt, 'Köpare', fullmaktIndex);
personData['p' + fullmaktIndex] = fullmakt;
}
}
}
}
if (scope.fullmaktTagare === 'true' && scope.dokumentData.Koepare[i].Fullmakt) {
incr++;
fullmaktIndex = "" + i + incr;
fullmakt = { Namn: scope.dokumentData.Koepare[i].Fullmakt };
koepareParagraf.ParagrafTextRO[fullmaktIndex] = getParagrafTextFromPerson(fullmakt, 'Köpare', fullmaktIndex);
personData['p' + fullmaktIndex] = fullmakt;
}
}
if (scope.joinaAlla === 'true' && scope.dokumentData.Koepare.length > 1
&& (scope.paragrafTyp === 'Namn' || aerAllaKoeparesAdressSamma)) {
var allasPersonNamn = getPersonNamn(scope.dokumentData.Koepare);
koepareParagraf.ParagrafTextRO['Alla'] = getParagrafTextFromPersonAlla(allasPersonNamn);
personData['pAlla'] = {
Namn: allasPersonNamn,
Adress: aerAllaKoeparesAdressSamma ? allaKoeparesAdress : undefined
};
} else if ((scope).dokumentVaerden && (scope).dokumentVaerden['pgKoepareParagraf' + (scope.dokumentVaerdeSuffix || '')] && (scope).dokumentVaerden['pgKoepareParagraf' + (scope.dokumentVaerdeSuffix || '')].Vaerde === 'Alla') {
(scope).dokumentVaerden['pgKoepareParagraf' + (scope.dokumentVaerdeSuffix || '')].Vaerde = null; // Nollställ när det inte längre finns som val
}
}
if (scope.extraParter === 'true' && scope.dokumentData.ExtraKontakter) {
for (var l = 0; l < scope.dokumentData.ExtraKontakter.length; l++) {
if (scope.dokumentData.ExtraKontakter[l].aerKoeparesKontaktperson && !containsPerson(scope.dokumentData.ExtraKontakter[l])) {
koepareParagraf.ParagrafTextRO[scope.dokumentData.ExtraKontakter[l].PersonId] = getParagrafTextFromPerson(scope.dokumentData.ExtraKontakter[l], 'Köpare', l);
personData['p' + scope.dokumentData.ExtraKontakter[l].PersonId] = scope.dokumentData.ExtraKontakter[l];
}
}
}
scope.data = {
koepareParagraf: koepareParagraf,
personData: personData
};
});
};
return {
restrict: 'E',
scope: {
granska: '=',
dokumentVaerden: '=',
pageSplit: '=',
splittable: '=',
styleObject: '=',
dokumentData: '=',
paragrafTyp: '@',
dokumentVaerdeSuffix: '@',
popoverPlacement: '@',
extraParter: '@',
fullmaktTagare: '@',
joinaAlla: '@'
},
link: link,
templateUrl: 'app/Directives/fbDokumentKoepareParagraf/fbDokumentKoepareParagraf.html'
};
}]);