Source code for akvo.iati.exports.elements.crs_add

# -*- coding: utf-8 -*-

# Akvo RSR is covered by the GNU Affero General Public License.
# See more details in the license.txt file located at the root folder of the Akvo RSR module.
# For additional details on the GNU license please see < http://www.gnu.org/licenses/agpl.html >.

from lxml import etree

from akvo.iati.exports.elements.utils import has_data


[docs]def crs_add(project): """ Generate the crs-add element. :param project: Project object :return: A list of Etree elements """ crs = getattr(project, 'crsadd', None) if crs: element = etree.Element("crs-add") for flag in crs.other_flags.all(): if flag.code or flag.significance is not None: other_flag_element = etree.SubElement(element, "other-flags") if flag.code: other_flag_element.attrib['code'] = flag.code if flag.significance is not None: other_flag_element.attrib['significance'] = '1' if flag.significance else '0' element.append(other_flag_element) if has_data(crs, ['loan_terms_rate1', 'loan_terms_rate2', 'repayment_type', 'repayment_plan', 'commitment_date', 'repayment_first_date', 'repayment_final_date', ]): loan_terms_element = etree.SubElement(element, "loan-terms") if crs.loan_terms_rate1 == 0 or crs.loan_terms_rate1: loan_terms_element.attrib['rate-1'] = str(crs.loan_terms_rate1) if crs.loan_terms_rate2 == 0 or crs.loan_terms_rate2: loan_terms_element.attrib['rate-2'] = str(crs.loan_terms_rate2) if crs.repayment_type: repayment_type_element = etree.SubElement(loan_terms_element, "repayment-type") repayment_type_element.attrib['code'] = crs.repayment_type if crs.repayment_plan: repayment_plan_element = etree.SubElement(loan_terms_element, "repayment-plan") repayment_plan_element.attrib['code'] = crs.repayment_plan if crs.commitment_date: commitment_date_element = etree.SubElement(loan_terms_element, "commitment-date") commitment_date_element.attrib['iso-date'] = str(crs.commitment_date) if crs.repayment_first_date: repayment_first_date_element = etree.SubElement(loan_terms_element, "repayment-first-date") repayment_first_date_element.attrib['iso-date'] = str(crs.repayment_first_date) if crs.repayment_final_date: repayment_final_date_element = etree.SubElement(loan_terms_element, "repayment-final-date") repayment_final_date_element.attrib['iso-date'] = str(crs.repayment_final_date) element.append(loan_terms_element) if has_data(crs, ['loan_status_year', 'loan_status_currency', 'loan_status_value_date', 'interest_received', 'principal_outstanding', 'principal_arrears', 'interest_arrears']): loan_status_element = etree.SubElement(element, "loan-status") if crs.loan_status_year: loan_status_element.attrib['year'] = str(crs.loan_status_year) if crs.loan_status_currency: loan_status_element.attrib['currency'] = crs.loan_status_currency if crs.loan_status_value_date: loan_status_element.attrib['value-date'] = str(crs.loan_status_value_date) if crs.interest_received == 0 or crs.interest_received: interest_received_element = etree.SubElement(loan_status_element, "interest-received") interest_received_element.text = str(crs.interest_received) if crs.principal_outstanding == 0 or crs.principal_outstanding: principal_outstanding_element = etree.SubElement(loan_status_element, "principal-outstanding") principal_outstanding_element.text = str(crs.principal_outstanding) if crs.principal_arrears == 0 or crs.principal_arrears: principal_arrears_element = etree.SubElement(loan_status_element, "principal-arrears") principal_arrears_element.text = str(crs.principal_arrears) if crs.interest_arrears == 0 or crs.interest_arrears: interest_arrears_element = etree.SubElement(loan_status_element, "interest-arrears") interest_arrears_element.text = str(crs.interest_arrears) element.append(loan_status_element) if crs.channel_code: channel_code_element = etree.SubElement(element, "channel-code") channel_code_element.text = str(crs.channel_code) return [element] else: return []