diff --git a/hypha/apply/projects/migrations/0042_add_external_project_id_field.py b/hypha/apply/projects/migrations/0042_add_external_project_id_field.py new file mode 100644 index 0000000000000000000000000000000000000000..b83bb3db64a27e064fef3255ed3d97dbc6ab2a38 --- /dev/null +++ b/hypha/apply/projects/migrations/0042_add_external_project_id_field.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.24 on 2021-11-10 13:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('application_projects', '0041_payment_requests_cleanup'), + ] + + operations = [ + migrations.AddField( + model_name='project', + name='external_projectid', + field=models.CharField(blank=True, help_text='ID of this project at integrated payment service.', max_length=30), + ), + ] diff --git a/hypha/apply/projects/models/project.py b/hypha/apply/projects/models/project.py index ec35612efb73beef6812caa1f32ab3c21a5af639..c0e92247036e98101ec1b7c858095cda6ac04772 100644 --- a/hypha/apply/projects/models/project.py +++ b/hypha/apply/projects/models/project.py @@ -157,7 +157,11 @@ class Project(BaseStreamForm, AccessFormData, models.Model): related_query_name='project', ) created_at = models.DateTimeField(auto_now_add=True) - + external_projectid = models.CharField( + max_length=30, + blank=True, + help_text='ID of this project at integrated payment service.' + ) sent_to_compliance_at = models.DateTimeField(null=True) objects = ProjectQuerySet.as_manager() diff --git a/hypha/apply/projects/services/sageintacct/utils.py b/hypha/apply/projects/services/sageintacct/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..54f7715bdb16543d5566548db3ccab1b2f7d0947 --- /dev/null +++ b/hypha/apply/projects/services/sageintacct/utils.py @@ -0,0 +1,28 @@ +from django.conf import settings +from .sageintacctsdk import SageIntacctSDK + + +def fetch_deliverable(program_project_id=''): + if not program_project_id: + return [] + formatted_filter = { + 'and': { + 'equalto': [ + {'field': 'DOCPARID', 'value': 'Project Contract'}, + {'field': 'DEPARTMENTID', 'value': program_project_id} + ], + 'greaterthan': {'field': 'QTY_REMAINING', 'value': 0.0} + } + } + + connection = SageIntacctSDK( + sender_id=settings.INTACCT_SENDER_ID, + sender_password=settings.INTACCT_SENDER_PASSWORD, + user_id=settings.INTACCT_USER_ID, + company_id=settings.INTACCT_COMPANY_ID, + user_password=settings.INTACCT_USER_PASSWORD + ) + + deliverables = connection.purchasing.get_by_query(filter_payload=formatted_filter) + + return deliverables diff --git a/hypha/apply/projects/services/sageintacct/wrapper/constants.py b/hypha/apply/projects/services/sageintacct/wrapper/constants.py index 6c6acad5d48b736c9c41b3533f29968214920a8e..ceae10b28eea0f3b19c7199c9c39ee8d3dade065 100644 --- a/hypha/apply/projects/services/sageintacct/wrapper/constants.py +++ b/hypha/apply/projects/services/sageintacct/wrapper/constants.py @@ -3,8 +3,8 @@ dimensions_fields_mapping = { 'ITEMID', 'ITEMNAME', 'ITEMDESC', - 'QUANTITY', + 'QTY_REMAINING', 'UNIT', - 'DEPARTMENTID', + 'PRICE', ], } diff --git a/hypha/apply/projects/services/sageintacct/wrapper/purchasing.py b/hypha/apply/projects/services/sageintacct/wrapper/purchasing.py index c9e0774d5c2f99a32b8481e70b0bb5504ba20136..628169d689cd5e1b8ff0635b43664c45a20374fc 100644 --- a/hypha/apply/projects/services/sageintacct/wrapper/purchasing.py +++ b/hypha/apply/projects/services/sageintacct/wrapper/purchasing.py @@ -2,7 +2,6 @@ """ Sage Intacct purchasing """ - from .api_base import ApiBase diff --git a/hypha/apply/projects/utils.py b/hypha/apply/projects/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..510ba09500cc68c54906f4334b59fa6ffbd9255b --- /dev/null +++ b/hypha/apply/projects/utils.py @@ -0,0 +1,18 @@ +from .models import Project, Deliverable + + +def save_deliverables(project_id, deliverables=[]): + project = Project.objects.get(id=project_id) + + deliverable_list = [] + for deliverable in deliverables: + deliverable_list.append( + Deliverable( + name=deliverable['ITEMNAME'], + available_to_invoice=int(float(deliverable['QTY_REMAINING'])), + unit_price=deliverable['PRICE'], + project=project + ) + ) + + Deliverable.objects.bulk_create(deliverable_list)