/**
  * Takes the $donor_data array as supplied to $this->giftAidSubmit
  * and adds it into the $package XMLWriter document.
  *
  * $donor_data structure is as follows
  * 'donation_date',
  * 'title',
  * 'first_name',
  * 'last_name',
  * 'house_no',
  * 'postcode', - must be a uk postcode for any uk address
  * 'overseas', - must be true if no postcode provided
  * 'sponsored' - set to true if this money is for a sponsored event
  * 'aggregation' - description of aggregated donations - else leave empty
  * 'amount'
  *
  * @param array $donor_data
  */
 private function buildClaimXml($donor_data)
 {
     $package = new XMLWriter();
     $package->openMemory();
     $package->setIndent(true);
     $package->startElement('Claim');
     $package->writeElement('OrgName', $this->getClaimingOrganisation()->getName());
     $package->writeElement('HMRCref', $this->getClaimingOrganisation()->getHmrcRef());
     $package->startElement('Regulator');
     $package->writeElement('RegName', $this->getClaimingOrganisation()->getRegulator());
     $package->writeElement('RegNo', $this->getClaimingOrganisation()->getRegNo());
     $package->endElement();
     # Regulator
     $package->startElement('Repayment');
     $earliestDate = strtotime(date('Y-m-d'));
     foreach ($donor_data as $d) {
         if (isset($d['donation_date'])) {
             $dDate = strtotime($d['donation_date']);
             $earliestDate = $dDate < $earliestDate ? $dDate : $earliestDate;
         }
         $package->startElement('GAD');
         if (!isset($d['aggregation']) or empty($d['aggregation'])) {
             $package->startElement('Donor');
             $person = new Individual($d['title'], $d['first_name'], $d['last_name'], '', $d['house_no'], $d['postcode'], (bool) $d['overseas']);
             $title = $person->getTitle();
             $fore = $person->getForename();
             $sur = $person->getSurname();
             $house = $person->getHouseNum();
             $postcode = $person->getPostcode();
             $overseas = $person->getIsOverseas();
             if (!empty($title)) {
                 $package->writeElement('Ttl', $title);
             }
             $package->writeElement('Fore', $fore);
             $package->writeElement('Sur', $sur);
             $package->writeElement('House', $house);
             if (!empty($postcode)) {
                 $package->writeElement('Postcode', $postcode);
             } else {
                 $package->writeElement('Overseas', $overseas);
             }
             $package->endElement();
             # Donor
         } elseif (!empty($d['aggregation'])) {
             $package->writeElement('AggDonation', $d['aggregation']);
         }
         if (isset($d['sponsored']) and $d['sponsored'] === true) {
             $package->writeElement('Sponsored', 'yes');
         }
         $package->writeElement('Date', $d['donation_date']);
         $package->writeElement('Total', number_format($d['amount'], 2, '.', ''));
         $package->endElement();
         # GAD
     }
     $package->writeElement('EarliestGAdate', date('Y-m-d', $earliestDate));
     if (!empty($this->gaAdjustment)) {
         $package->writeElement('Adjustment', number_format($this->gaAdjustment, 2, '.', ''));
     }
     $package->endElement();
     # Repayment
     $package->startElement('GASDS');
     $package->writeElement('ConnectedCharities', $this->getClaimingOrganisation()->getHasConnectedCharities() ? 'yes' : 'no');
     foreach ($this->getClaimingOrganisation()->getConnectedCharities() as $cc) {
         $package->startElement('Charity');
         $package->writeElement('Name', $cc->getName());
         $package->writeElement('HMRCref', $cc->getHmrcRef());
         $package->endElement();
         # Charity
     }
     foreach ($this->gasdsYear as $key => $val) {
         $package->startElement('GASDSClaim');
         $package->writeElement('Year', $this->gasdsYear[$key]);
         $package->writeElement('Amount', number_format($this->gasdsAmount[$key], 2, '.', ''));
         $package->endElement();
         # GASDSClaim
     }
     $package->writeElement('CommBldgs', $this->haveCbcd == true ? 'yes' : 'no');
     foreach ($this->cbcdAddr as $key => $val) {
         $package->startElement('Building');
         $package->writeElement('BldgName', $this->cbcdBldg[$key]);
         $package->writeElement('Address', $this->cbcdAddr[$key]);
         $package->writeElement('Postcode', $this->cbcdPoCo[$key]);
         $package->startElement('BldgClaim');
         $package->writeElement('Year', $this->cbcdYear[$key]);
         $package->writeElement('Amount', number_format($this->cbcdAmount[$key], 2, '.', ''));
         $package->endElement();
         # BldgClaim
         $package->endElement();
         # Building
     }
     if (!empty($this->gasdsAdjustment)) {
         $package->writeElement('Adj', number_format($this->gasdsAdjustment, 2, '.', ''));
     }
     $package->endElement();
     # GASDS
     $otherInfo = array();
     if (!empty($this->gasdsAdjustment)) {
         $otherInfo[] = $this->gasdsAdjReason;
     }
     if (!empty($this->gaAdjustment)) {
         $otherInfo[] = $this->gaAdjReason;
     }
     if (count($otherInfo) > 0) {
         $package->writeElement('OtherInfo', implode(' AND ', $otherInfo));
     }
     $package->endElement();
     # Claim
     return $package->outputMemory();
 }
 public function __construct($title, $name, $surname, $phone, $postcode)
 {
     parent::__construct($title, $name, $surname, $phone, null, $postcode);
 }