Ejemplo n.º 1
0
    def mark_as_completed(self):
        self.completed_at = timezone_now()
        if not self.ta_required and self.status == self.PLANNED:
            self.send_notification_email(
                'Travel #{} was completed.'.format(self.reference_number),
                self.supervisor.email, 'emails/no_approval_complete.html')
        else:
            self.send_notification_email(
                'Travel #{} was completed.'.format(self.reference_number),
                self.supervisor.email, 'emails/trip_completed.html')

        try:
            from partners.models import PartnerOrganization
            for act in self.activities.filter(
                    primary_traveler=self.traveler,
                    travel_type=TravelType.PROGRAMME_MONITORING):
                PartnerOrganization.programmatic_visits(act.partner,
                                                        update_one=True)

            for act in self.activities.filter(
                    primary_traveler=self.traveler,
                    travel_type=TravelType.SPOT_CHECK):
                PartnerOrganization.spot_checks(act.partner, update_one=True)

        except Exception as e:
            logging.info(
                u'Exception while trying to update hact values {}'.format(e))
Ejemplo n.º 2
0
 def test_micro_assessment_needed_missing(self):
     self.partner_organization.hact_values[
         "planned_cash_transfer"] = 10000.00
     self.partner_organization.save()
     PartnerOrganization.micro_assessment_needed(self.partner_organization)
     self.assertEqual(
         self.partner_organization.hact_values["micro_assessment_needed"],
         "Missing")
Ejemplo n.º 3
0
    def save(self, **kwargs):
        # update hact values
        if self.completed_date is None and self.follow_up:
            if self.trip.linkedgovernmentpartner_set:
                for gov_partner in self.trip.linkedgovernmentpartner_set.all():
                    PartnerOrganization.follow_up_flags(gov_partner.partner, self)

            if self.trip.linkedpartner_set:
                for link_partner in self.trip.linkedpartner_set.all():
                    PartnerOrganization.follow_up_flags(link_partner.partner, self)
        return super(ActionPoint, self).save(**kwargs)
Ejemplo n.º 4
0
 def test_micro_assessment_needed_high_risk(self):
     year = datetime.date.today().year
     self.partner_organization.type_of_assessment = "High Risk Assumed"
     self.partner_organization.save()
     assessment = Assessment.objects.create(
         partner=self.partner_organization,
         type="Micro Assessment",
         completed_date=datetime.date(year, 1, 1))
     PartnerOrganization.micro_assessment_needed(self.partner_organization)
     self.assertEqual(
         self.partner_organization.hact_values["micro_assessment_needed"],
         "Yes")
Ejemplo n.º 5
0
    def save(self, **kwargs):
        # check if trip can be approved
        if self.can_be_approved:
            self.approved_date = datetime.date.today()
            self.status = Trip.APPROVED

        if self.status is not Trip.CANCELLED and self.cancelled_reason:
            self.status = Trip.CANCELLED

        if self.status == Trip.APPROVED and \
        self.driver is not None and \
        self.driver_supervisor is not None and \
        self.driver_trip is None:
            self.create_driver_trip()

        if self.status == Trip.COMPLETED and self.driver_trip:
            driver_trip = Trip.objects.get(id=self.driver_trip.id)
            driver_trip.status = Trip.COMPLETED
            driver_trip.save()

        # update partner hact values
        if self.status == Trip.COMPLETED and self.travel_type in [Trip.PROGRAMME_MONITORING, Trip.SPOT_CHECK]:
            if self.linkedgovernmentpartner_set:
                for gov_partner in self.linkedgovernmentpartner_set.all():
                    PartnerOrganization.programmatic_visits(gov_partner.partner, self)
                    PartnerOrganization.spot_checks(gov_partner.partner, self)

            if self.linkedpartner_set:
                for link_partner in self.linkedpartner_set.all():
                    PartnerOrganization.programmatic_visits(link_partner.partner, self)
                    PartnerOrganization.spot_checks(link_partner.partner, self)

        super(Trip, self).save(**kwargs)
Ejemplo n.º 6
0
 def test_micro_assessment_needed_no(self):
     year = datetime.date.today().year
     self.partner_organization.type_of_assessment = "Other"
     self.partner_organization.hact_values[
         "planned_cash_transfer"] = 100000.00
     self.partner_organization.save()
     assessment = Assessment.objects.create(
         partner=self.partner_organization,
         type="Micro Assessment",
         completed_date=datetime.date(year, 1, 1))
     PartnerOrganization.micro_assessment_needed(self.partner_organization)
     self.assertEqual(
         self.partner_organization.hact_values["micro_assessment_needed"],
         "No")
Ejemplo n.º 7
0
 def test_audit_needed_extra_assessment_only(self):
     CountryProgramme.objects.create(
         name="CP 1",
         wbs="/A0/",
         from_date=datetime.date(datetime.date.today().year - 1, 1, 1),
         to_date=datetime.date(datetime.date.today().year + 1, 1, 1),
     )
     assessment = Assessment.objects.create(
         partner=self.partner_organization,
         type="Scheduled Audit report",
         completed_date=datetime.date(datetime.date.today().year, 2, 1))
     self.partner_organization.total_ct_cp = 500001.00
     self.partner_organization.save()
     PartnerOrganization.audit_needed(self.partner_organization, assessment)
     self.assertEqual(self.partner_organization.hact_values['audits_mr'], 0)
Ejemplo n.º 8
0
 def test_micro_assessment_needed_older_than_54m(self):
     year = datetime.date.today().year
     self.partner_organization.type_of_assessment = "Micro Assessment"
     self.partner_organization.rating = "low"
     self.partner_organization.hact_values[
         "planned_cash_transfer"] = 10000.00
     self.partner_organization.save()
     assessment = Assessment.objects.create(
         partner=self.partner_organization,
         type="Micro Assessment",
         completed_date=datetime.date.today() -
         datetime.timedelta(days=1643))
     PartnerOrganization.micro_assessment_needed(self.partner_organization)
     self.assertEqual(
         self.partner_organization.hact_values["micro_assessment_needed"],
         "Yes")
Ejemplo n.º 9
0
def update_partners(country_name=None):
    print 'Starting update HACT values for partners'
    countries = Country.objects.filter(vision_sync_enabled=True)
    if country_name is not None:
        countries = countries.filter(name=country_name)
    for country in countries:
        connection.set_tenant(country)
        print country.name
        partners = PartnerOrganization.objects.all()
        for partner in partners:
            try:
                PartnerOrganization.micro_assessment_needed(partner)
                if partner.total_ct_cp > 500000:
                    PartnerOrganization.audit_needed(partner)
            except Exception as e:
                print partner.name
                print partner.hact_values
                print e.message
Ejemplo n.º 10
0
def update_all_partners(country_name=None):
    logger.info(u'Starting update HACT values for partners')
    countries = Country.objects.filter(vision_sync_enabled=True)
    if country_name is not None:
        countries = countries.filter(name=country_name)
    for country in countries:
        connection.set_tenant(country)
        logger.info(u'Updating '.format(country.name))
        partners = PartnerOrganization.objects.all()
        for partner in partners:
            try:
                PartnerOrganization.planned_visits(partner)
                PartnerOrganization.programmatic_visits(partner)
                PartnerOrganization.spot_checks(partner)
                PartnerOrganization.audits_completed(partner)

            except Exception:
                logger.exception(u'Exception {} {}'.format(
                    partner.name, partner.hact_values))
Ejemplo n.º 11
0
def update_all_partners(country_name=None):
    print 'Starting update HACT values for partners'
    countries = Country.objects.filter(vision_sync_enabled=True)
    if country_name is not None:
        countries = countries.filter(name=country_name)
    for country in countries:
        connection.set_tenant(country)
        print country.name
        partners = PartnerOrganization.objects.all()
        for partner in partners:
            try:
                PartnerOrganization.planned_cash_transfers(partner)
                PartnerOrganization.micro_assessment_needed(partner)
                PartnerOrganization.audit_needed(partner)
                PartnerOrganization.planned_visits(partner)
                PartnerOrganization.programmatic_visits(partner)
                PartnerOrganization.spot_checks(partner)
                PartnerOrganization.follow_up_flags(partner)
                PartnerOrganization.audit_done(partner)
            except Exception as e:
                print partner.name
                print partner.hact_values
                print e.message
Ejemplo n.º 12
0
 def finalize(self, *args, **kwargs):
     PartnerOrganization.audits_completed(self.partner, update_one=True)
     return super(SpecialAudit, self).finalize(*args, **kwargs)
Ejemplo n.º 13
0
 def finalize(self, *args, **kwargs):
     PartnerOrganization.spot_checks(self.partner, update_one=True, event_date=self.date_of_draft_report_to_unicef)
     return super(SpotCheck, self).finalize(*args, **kwargs)
Ejemplo n.º 14
0
    def test_planned_cash_transfers(self):

        PartnerOrganization.planned_cash_transfers(self.intervention.partner)
        self.assertEqual(
            self.intervention.partner.hact_values['planned_cash_transfer'],
            60000)
Ejemplo n.º 15
0
 def test_audit_needed_over_500k(self):
     self.partner_organization.total_ct_cp = 500001.00
     self.partner_organization.save()
     PartnerOrganization.audit_needed(self.partner_organization)
     self.assertEqual(self.partner_organization.hact_values['audits_mr'], 1)
Ejemplo n.º 16
0
 def test_audit_done_zero(self):
     PartnerOrganization.audit_done(self.partner_organization)
     self.assertEqual(self.partner_organization.hact_values['audits_done'],
                      0)
Ejemplo n.º 17
0
        def _partner_save(processed, partner):

            try:
                new = False
                saving = False
                try:
                    partner_org = PartnerOrganization.objects.get(
                        vendor_number=partner["VENDOR_CODE"])
                except PartnerOrganization.DoesNotExist:
                    partner_org = PartnerOrganization(
                        vendor_number=partner["VENDOR_CODE"])
                    new = True

                try:
                    type_mapping[partner["PARTNER_TYPE_DESC"]]
                except KeyError as exp:
                    print "Partner {} skipped, because PartnerType ={}".format(
                        partner['VENDOR_NAME'], exp)
                    # if partner organization exists in etools db (these are nameless)
                    if partner_org.id:
                        partner_org.name = ""  # leaving the name blank on purpose (invalid record)
                        partner_org.deleted_flag = True if partner[
                            "DELETED_FLAG"] else False
                        partner_org.hidden = True
                        partner_org.save()
                    return processed

                if new or _changed_fields([
                        'name', 'cso_type', 'rating', 'type_of_assessment',
                        'address', 'phone_number', 'email', 'deleted_flag',
                        'last_assessment_date', 'core_values_assessment_date'
                ], partner_org, partner):
                    partner_org.name = partner["VENDOR_NAME"]
                    partner_org.cso_type = partner["CSO_TYPE_NAME"]
                    partner_org.rating = partner["RISK_RATING_NAME"]
                    partner_org.type_of_assessment = partner[
                        "TYPE_OF_ASSESSMENT"]
                    partner_org.address = partner["STREET_ADDRESS"]
                    partner_org.phone_number = partner["PHONE_NUMBER"]
                    partner_org.email = partner["EMAIL"]
                    partner_org.core_values_assessment_date = wcf_json_date_as_datetime(
                        partner["CORE_VALUE_ASSESSMENT_DT"])
                    partner_org.last_assessment_date = wcf_json_date_as_datetime(
                        partner["LAST_ASSESSMENT_DATE"])
                    partner_org.partner_type = type_mapping[
                        partner["PARTNER_TYPE_DESC"]]
                    partner_org.deleted_flag = True if partner[
                        "DELETED_FLAG"] else False
                    if not partner_org.hidden:
                        partner_org.hidden = partner_org.deleted_flag
                    partner_org.vision_synced = True
                    saving = True

                if partner_org.total_ct_cp == None or partner_org.total_ct_cy == None or \
                        not comp_decimals(partner_org.total_ct_cp, _totals_cp[partner["VENDOR_CODE"]]) or \
                        not comp_decimals(partner_org.total_ct_cy, _totals_cy[partner["VENDOR_CODE"]]):

                    partner_org.total_ct_cy = _totals_cy[
                        partner["VENDOR_CODE"]]
                    partner_org.total_ct_cp = _totals_cp[
                        partner["VENDOR_CODE"]]

                    saving = True
                    print "sums changed", partner_org

                if saving:
                    print "Updating Partner", partner_org
                    partner_org.save()
                del _totals_cy[partner["VENDOR_CODE"]]
                del _totals_cp[partner["VENDOR_CODE"]]

                processed += 1

            except Exception as exp:
                print "Exception message: {} " \
                      "Exception type: {} " \
                      "Exception args: {} ".format(
                        exp.message, type(exp).__name__, exp.args
                    )
            return processed