public void FillProperties(string xml)
{
XDocument xdoc;
try
{
xdoc = XDocument.Parse(xml);
}
catch
{
return;
}
if (xdoc.Root == null) return;
var xElement = xdoc.Element("bor-info");
if (xElement == null) return;
var xElementRecord = xElement.Element("z303");
var xElementField = xElementRecord;
if (xElementRecord != null)
{
Id = GetXmlValue(xElementRecord, "z303-id");
Name = GetFormattedName(GetXmlValue(xElementRecord, "z303-name"));
DateOfBirth = GetFormattedDate(GetXmlValue(xElementRecord, "z303-birth-date"));
HomeLibrary = GetXmlValue(xElementRecord, "z303-home-library");
}
xElementRecord = xElement.Element("z304");
if (xElementRecord != null)
{
PrefixAddress = GetXmlValue(xElementRecord, "z304-address-0");
StreetAddress = GetXmlValue(xElementRecord, "z304-address-1");
CityAddress = GetXmlValue(xElementRecord, "z304-address-3");
Zip = GetXmlValue(xElementRecord, "z304-zip");
Email = GetXmlValue(xElementRecord, "z304-email-address");
HomePhoneNumber = GetXmlValue(xElementRecord, "z304-telephone");
CellPhoneNumber = GetXmlValue(xElementRecord, "z304-telephone-3");
}
xElementRecord = xElement.Element("z305");
if (xElementRecord != null)
{
CashLimit = GetXmlValue(xElementRecord, "z305-cash-limit");
}
xElementRecord = xElement.Element("balance");
if (xElementRecord != null)
{
Balance = xElementRecord.Value;
}
// Put all the reservations of the borrower into a list of Reservation objects
xElementRecord = xElement.Element("item-h");
if (xElementRecord != null)
{
var pickupLocation = "";
var holdRequestFrom = "";
var holdRequestTo = "";
var cancellationSequence = "";
var itemSeq = "";
var itemDocNumber = "";
var holdRequestEnd = "";
var reservationStatus = "";
var reservations = new List<Reservation>();
var reservationVarfields = xElement.Elements("item-h").ToList();
foreach (var varfield in reservationVarfields)
{
//Get information from table z37
xElementField = varfield.Element("z37");
if (xElementField != null)
{
pickupLocation = GetXmlValue(xElementField, "z37-pickup-location");
if (pickupLocation == "Hovedbibl.")
pickupLocation = "Hovedbiblioteket";
reservationStatus = GetXmlValue(xElementField, "z37-status");
holdRequestFrom = GetFormattedDate(GetXmlValue(xElementField, "z37-request-date"));
holdRequestTo = GetFormattedDate(GetXmlValue(xElementField, "z37-end-request-date"));
cancellationSequence = GetXmlValue(xElementField, "z37-sequence");
itemSeq = GetXmlValue(xElementField, "z37-item-sequence");
itemDocNumber = GetXmlValue(xElementField, "z37-doc-number");
holdRequestEnd = GetFormattedDate(GetXmlValue(xElementField, "z37-end-hold-date"));
}
//Get information from table z13
xElementField = varfield.Element("z13");
if (xElementField == null) continue;
var docNumber = GetXmlValue(xElementField, "z13-doc-number");
docNumber = GetFormattedDocNumber(docNumber);
var docTitle = GetXmlValue(xElementField, "z13-title");
var reservation = new Reservation()
{
Status = reservationStatus,
DocumentNumber = docNumber,
DocumentTitle = docTitle,
PickupLocation = pickupLocation,
HoldRequestFrom = holdRequestFrom,
HoldRequestTo = holdRequestTo,
CancellationSequence = cancellationSequence,
ItemSeq = itemSeq,
ItemDocumentNumber = itemDocNumber,
HoldRequestEnd = holdRequestEnd,
};
reservations.Add(reservation);
}
reservations = reservations.OrderBy(x => x.HoldRequestTo).ToList();
Reservations = reservations;
}
//Put all the loans for the borrower into a list of Loan objects
xElementRecord = xElement.Element("item-l");
if (xElementRecord != null)
{
var docNumber = "";
var itemSequence = "";
var subLibrary = "";
var orgDueDate = "";
var loanDate = "";
var loanHour = "";
var dueDate = "";
var itemStatus = "";
var barcode = "";
var adminDocNumber = "";
var docTitle = "";
var loans = new List<Loan>();
var loanVarfields = xElement.Elements("item-l").ToList();
foreach (var varfield in loanVarfields)
{
//Get information from table z36
xElementField = varfield.Element("z36");
if (xElementField != null)
{
subLibrary = GetXmlValue(xElementField, "z36-sub-library");
if (subLibrary == "Hovedbibl.")
subLibrary = "Hovedbiblioteket";
orgDueDate = GetFormattedDate(GetXmlValue(xElementField, "z36-original-due-date"));
loanDate = GetFormattedDate(GetXmlValue(xElementField, "z36-loan-date"));
loanHour = GetXmlValue(xElementField, "z36-loan-hour");
dueDate = GetFormattedDate(GetXmlValue(xElementField, "z36-due-date"));
}
//Get information from table z30
xElementField = varfield.Element("z30");
if (xElementField != null)
{
adminDocNumber = GetXmlValue(xElementField, "z30-doc-number");
itemSequence = GetXmlValue(xElementField, "z30-item-sequence");
itemStatus = GetXmlValue(xElementField, "z30-item-status");
barcode = GetXmlValue(xElementField, "z30-barcode");
}
//Get information from table z13
xElementField = varfield.Element("z13");
if (xElementField != null)
{
docNumber = GetXmlValue(xElementField, "z13-doc-number");
docNumber = GetFormattedDocNumber(docNumber);
docTitle = GetXmlValue(xElementField, "z13-title");
}
var loan = new Loan()
{
DocumentNumber = docNumber,
AdminisrtativeDocumentNumber = adminDocNumber,
ItemSequence = itemSequence,
Barcode = barcode,
DocumentTitle = docTitle,
SubLibrary = subLibrary,
OriginalDueDate = orgDueDate,
ItemStatus = itemStatus,
LoanDate = loanDate,
LoanHour = loanHour,
Material = null,
DueDate = dueDate
};
loans.Add(loan);
}
loans = loans.OrderBy(x => x.DueDate).ToList();
Loans = loans;
}
//Put all fines connected to the borrower in a list
xElementRecord = xElement.Element("fine");
double sum = 0;
var date = "";
var status = "";
var creditDebit = new char();
var description = "";
string descriptionLookupValue = null;
if (xElementRecord != null)
{
var fines = new List<Fine>();
var activeFines = new List<Fine>();
var varfields = xElement.Elements("fine").ToList();
foreach (var varfield in varfields)
{
//Get information from table z31
xElementField = varfield.Element("z31");
if (xElementField != null)
{
//Get a number from the data in Sum field
var sumAsString = GetXmlValue(xElementField, "z31-sum");
if (sumAsString != null)
{
//Format may be "[2009]" or "(30.00)", trim if so
var regExp = new Regex(@"[a-zA-Z\[\]]*(\d+)[a-zA-Z\[\]]*");
var foundValue = regExp.Match(sumAsString).Groups[1].ToString();
if (!string.IsNullOrEmpty(foundValue))
sum = double.Parse(foundValue);
}
date = GetFormattedDate(GetXmlValue(xElementField, "z31-date"));
status = GetXmlValue(xElementField, "z31-status");
if (status == "Not paid by/credited to patron")
status = "Ikke betalt ";
description = GetXmlValue(xElementField, "z31-type");
if (description != null)
TypeOfFineDictionary.TryGetValue(description, out descriptionLookupValue);
creditDebit = Convert.ToChar(GetXmlValue(xElementField, "z31-credit-debit"));
}
//Get information from table z13, givent that there is more than one node in temp
xElementField = varfield.Element("z13");
var docId = "";
var docTitle = "";
if (xElementField != null)
{
docId = GetXmlValue(xElementField, "z13-doc-number") ?? docId;
docId = GetFormattedDocNumber(docId);
docTitle = GetXmlValue(xElementField, "z13-title");
}
var fine = new Fine()
{
Date = date,
Status = status,
CreditDebit = creditDebit,
Sum = sum,
Description = descriptionLookupValue ?? description,
DocumentNumber = docId,
DocumentTitle = docTitle
};
fines.Add(fine);
if (fine.Status != "Cancelled" && fine.Status != "Paid")
activeFines.Add(fine);
}
Fines = fines;
ActiveFines = activeFines;
}
Notifications = GetNotification(this);
}