private function importExecutiveRelationship($entityId, $person_arr, $title = null, $current = null) { if (!in_array($entityId, $this->old_exec_entity_ids)) { $rel = new Relationship(); $rel->entity1_id = $entityId; $rel->entity2_id = $this->entity->id; $rel->setCategory('Position'); $rel->is_current = $current; $rel->is_board = 0; $rel->is_executive = 1; if ($title != '') { $rel->description1 = $title; } //Form 3s let us set a start date if ($person_arr['formName'] == 'Form 3' && $person_arr['date']) { //filing date could be innacurate, so only use month $date = LsDate::formatFromText($person_arr['date']); $rel->start_date = preg_replace('/-\\d\\d$/', '-00', $date); } if (!$this->testMode) { $rel->save(); //save sources $rel->addReference($person_arr['readableXmlUrl'], null, null, $this->entity->name . ' ' . $person_arr['formName'], null, $person_arr['date']); if (isset($this->filing_url) && isset($this->filing_name)) { $rel->addReference($this->filing_url, null, null, $this->entity->name . " " . $this->filing_name, null, $this->filing_date); } } $this->printDebug("+ Relationship created: " . $rel->id . " (" . $rel->description1 . ")"); } }
private function getTransactionDetails($org, $fedspending_id) { if (!$this->browser->get($this->fedSpendingSearchUrl, array('record_id' => $fedspending_id, 'datype' => 'X', 'detail' => '4'))->responseIsError()) { $response_url = $this->browser->getUrlInfo(); $response_url_str = "http://" . $response_url['host'] . $response_url['path'] . "?" . $response_url['query']; $this->printDebug("Transaction #{$fedspending_id} http://" . $response_url['host'] . $response_url['path'] . "?" . $response_url['query']); $text = $this->browser->getResponseText(); $this->browser->setResponseText(iconv('ISO-8859-1', 'UTF-8', $this->browser->getResponseText())); $xml = $this->browser->getResponseXml(); } else { $this->printDebug("Couldn't get " . $this->fedSpendingSearchUrl); return false; } $obligated_amount = $xml->xpath('/fedspendingSearchResults/data/record/amounts/obligatedAmount'); $maj_agency_cat = $xml->xpath('/fedspendingSearchResults/data/record/purchaser_information/maj_agency_cat'); $contracting_agency = $xml->xpath('/fedspendingSearchResults/data/record/purchaser_information/contractingOfficeAgencyID'); $psc_cat = $xml->xpath('/fedspendingSearchResults/data/record/product_or_service_information/psc_cat'); $signed_date = $xml->xpath('/fedspendingSearchResults/data/record/contract_information/signedDate'); $descriptionOfContractRequirement = $xml->xpath('/fedspendingSearchResults/data/record/contract_information/descriptionOfContractRequirement'); $current_completion_date = $xml->xpath('/fedspendingSearchResults/data/record/contract_information/currentCompletionDate'); $state_code = $xml->xpath('/fedspendingSearchResults/data/record/principal_place_of_performance/stateCode'); $place_of_performance_congressional_district = $xml->xpath('/fedspendingSearchResults/data/record/principal_place_of_performance/placeOfPerformanceCongressionalDistrict'); foreach ($obligated_amount as $key => $dont_use) { $gov_name = $this->cleanGovtBodyName($maj_agency_cat[$key]); $gov_agency = $this->getGovernmentBodyEntity($gov_name, $maj_agency_cat[$key]); if ($gov_agency) { //$this->printDebug("Found existing Government Agency" . $gov_agency->name); } else { $gov_name = $this->cleanGovtBodyName($maj_agency_cat[$key]); $this->printDebug($gov_name); $gov_agency = $this->addGovernmentBodyEntity($gov_name, $maj_agency_cat[$key]); $this->printDebug("Creating new Government Agency: " . $gov_agency->name); $gov_agency->addReference(self::$baseContractorUrl . $org->fedspending_id, null, array('name', 'parent_id'), 'FedSpending.org'); } if (!$gov_agency) { $this->printDebug("Error creating Government Agency"); return false; } $sub_agency_name = $this->cleanGovtBodyName($contracting_agency[$key]); $sub_agency = $this->getGovernmentBodyEntity($sub_agency_name, $contracting_agency[$key]); if ($sub_agency_name == $gov_agency->name) { $sub_agency = $gov_agency; } if (!$sub_agency) { $sub_agency = $this->addGovernmentBodyEntity($sub_agency_name, $contracting_agency[$key], $gov_agency->id); $this->printDebug("Creating new sub-agency: " . $sub_agency->name); $sub_agency->addReference(self::$baseContractorUrl . $org->fedspending_id, null, array('name', 'parent_id'), 'FedSpending.org'); } if (!$sub_agency) { $this->printDebug("Error creating Government Agency"); return false; } try { $district = null; $state = explode(': ', $state_code[$key]); $federal_district = explode(': ', $place_of_performance_congressional_district[$key]); $state = $state[0]; $federal_district = $federal_district[0]; $filing = new FedspendingFiling(); $filing->goods = $descriptionOfContractRequirement[$key]; $filing->amount = abs($obligated_amount[$key]); if ($filing->amount < 1000) { $this->printDebug('amount under $1000, rolling back'); return 'under_1000'; } //$this->printDebug("state: " . $state . " and district: " . $federal_district); if ($district = PoliticalDistrictTable::getFederalDistrict($state, $federal_district)) { //$this->printDebug("found " . $district->id); $filing->District = $district; } elseif (trim($state) && trim($federal_district)) { try { $district = PoliticalDistrictTable::addFederalDistrict($state, $federal_district); $this->printDebug("Adding District " . $state . " #" . $district->id); $filing->District = $district; } catch (Exception $e) { throw $e; } } $filing->fedspending_id = $fedspending_id; $filing->start_date = LsDate::formatFromText($signed_date[$key]); $filing->end_date = LsDate::formatFromText($current_completion_date[$key]); $relationship = null; if ($relationship = $org->getRelationshipsWithQuery($sub_agency, RelationshipTable::TRANSACTION_CATEGORY)->fetchOne()) { $relationship->addFedspendingFiling($filing); } else { $relationship = new Relationship(); $relationship->Entity1 = $org; $relationship->Entity2 = $sub_agency; $relationship->setCategory('Transaction'); $relationship->description1 = 'Contractor'; $relationship->description2 = 'Client'; $relationship->save(); $relationship->addReference(self::$baseContractorUrl . $org->fedspending_id, null, array('start_date', 'end_date', 'amount', 'goods'), 'FedSpending.org'); $relationship->addFedspendingFiling($filing); } $filing->save(); return true; } catch (Exception $e) { throw $e; } } }