From adace74282a8d9dd0408f540b0799d21f79dddf2 Mon Sep 17 00:00:00 2001
From: sks444 <krishnasingh.ss30@gmail.com>
Date: Wed, 10 Nov 2021 19:04:41 +0530
Subject: [PATCH] Add methods to fetch and save deliverables

---
 .../0042_add_external_project_id_field.py     | 18 ++++++++++++
 hypha/apply/projects/models/project.py        |  6 +++-
 .../projects/services/sageintacct/utils.py    | 28 +++++++++++++++++++
 .../services/sageintacct/wrapper/constants.py |  4 +--
 .../sageintacct/wrapper/purchasing.py         |  1 -
 hypha/apply/projects/utils.py                 | 18 ++++++++++++
 6 files changed, 71 insertions(+), 4 deletions(-)
 create mode 100644 hypha/apply/projects/migrations/0042_add_external_project_id_field.py
 create mode 100644 hypha/apply/projects/services/sageintacct/utils.py
 create mode 100644 hypha/apply/projects/utils.py

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 000000000..b83bb3db6
--- /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 ec35612ef..c0e922470 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 000000000..54f7715bd
--- /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 6c6acad5d..ceae10b28 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 c9e0774d5..628169d68 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 000000000..510ba0950
--- /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)
-- 
GitLab