diff --git a/pyintacct/models/company.py b/pyintacct/models/company.py index c5fd332..f6de8b1 100755 --- a/pyintacct/models/company.py +++ b/pyintacct/models/company.py @@ -1,7 +1,20 @@ from .base import API21Object -from pydantic import BaseModel -from typing import Optional +from pydantic import BaseModel, Field +from typing import Optional, List +class AttachmentDetail(BaseModel): + attachmentname: Optional[str] = None + attachmenttype: Optional[str] = None + attachmentdata: Optional[str] = None + +class Attachment(BaseModel): + attachment: List[AttachmentDetail] = Field(default_factory=list) + +class SupDoc(API21Object): + supdocid: Optional[str] = None + supdocfoldername: Optional[str] = None + supdocdescription: Optional[str] = None + attachments: Attachment = Field(default_factory=Attachment) class MailAddress(BaseModel): address1: Optional[str] = None @@ -14,7 +27,6 @@ class MailAddress(BaseModel): latitude: Optional[str] = None longitude: Optional[str] = None - class Contact(API21Object): contactname: str = ... printas: Optional[str] = None diff --git a/tests/test_company.py b/tests/test_company.py index 0d10f38..c3e441a 100755 --- a/tests/test_company.py +++ b/tests/test_company.py @@ -1,4 +1,6 @@ -from pyintacct.models.company import Contact +import pytest + +from pyintacct.models.company import Contact, MailAddress, SupDoc, Attachment, AttachmentDetail from tests.utils import random_str @@ -26,3 +28,95 @@ def test_create_from_dict(client): contact['CONTACT']['PRINTAS'] = 'MyTestContact1' client.update(contact) client.delete(Contact, [name]) + + +def test_create_contact_with_mailaddress(client): + contact_name = f'ρyIntacct-{random_str()}' + mail_address = MailAddress( + address1='123 Main St', + city='Anytown', + state='CA', + zip='12345', + country='USA' + ) + contact = Contact( + contactname=contact_name, + printas=contact_name, + mailaddress=mail_address + ) + client.create(contact) + contacts = client.read_by_query('CONTACT', f"CONTACTNAME = \'{contact_name}\'") + assert len(contacts) == 1 + contact_key = contacts[0]['RECORDNO'] + client.delete('CONTACT', [contact_key]) + + +def test_create_contact_with_supdoc(client): + contact_name = f'ρyIntacct-{random_str()}' + attachment_detail = AttachmentDetail( + attachmentname='test_attachment', + attachmenttype='PDF', + attachmentdata='base64encodedstring' + ) + attachment = Attachment(attachment=[attachment_detail]) + supdoc = SupDoc( + supdocid='SUPDOC-001', + supdocdescription='Test SupDoc', + attachments=attachment + ) + contact = Contact( + contactname=contact_name, + printas=contact_name, + supdoc=supdoc + ) + client.create(contact) + contacts = client.read_by_query('CONTACT', f"CONTACTNAME = \'{contact_name}\'") + assert len(contacts) == 1 + contact_key = contacts[0]['RECORDNO'] + client.delete('CONTACT', [contact_key]) + + +def test_create_contact_with_full_details(client): + contact_name = f'ρyIntacct-{random_str()}' + mail_address = MailAddress( + address1='123 Main St', + city='Anytown', + state='CA', + zip='12345', + country='USA' + ) + attachment_detail = AttachmentDetail( + attachmentname='test_attachment', + attachmenttype='PDF', + attachmentdata='base64encodedstring' + ) + attachment = Attachment(attachment=[attachment_detail]) + supdoc = SupDoc( + supdocid='SUPDOC-001', + supdocdescription='Test SupDoc', + attachments=attachment + ) + contact = Contact( + contactname=contact_name, + printas=contact_name, + companyname='MyCompany', + phone1='123-456-7890', + email1='test@example.com', + mailaddress=mail_address, + supdoc=supdoc + ) + client.create(contact) + contacts = client.read_by_query('CONTACT', f"CONTACTNAME = \'{contact_name}\'") + assert len(contacts) == 1 + contact_key = contacts[0]['RECORDNO'] + client.delete('CONTACT', [contact_key]) + + +@pytest.fixture +def make_contact_record(): + def _make_contact(contact_name): + return Contact( + contactname=contact_name, + printas=contact_name + ) + return _make_contact diff --git a/tests/test_order_entry.py b/tests/test_order_entry.py new file mode 100644 index 0000000..2bd2d07 --- /dev/null +++ b/tests/test_order_entry.py @@ -0,0 +1,45 @@ +from decimal import Decimal + +from pyintacct.models.base import Date +from pyintacct.models.order_entry import SOTransaction, SOTransactionItem, SOTransactionItems + + +def test_create_sotransaction(client): + items = SOTransactionItems(sotransitem=[ + SOTransactionItem(itemid='1001', quantity=Decimal('5'), unit='Each', locationid='100', price=Decimal('100.00')), + SOTransactionItem(itemid='1002', quantity=Decimal('3'), unit='Each', locationid='100', price=Decimal('200.00')) + ]) + + transaction = SOTransaction( + transactiontype='Sales Order', + datecreated=Date(year='2024', month='6', day='18'), + customerid='CUST-1000', + sotransitems=items, + termname='Net 30', + basecurr='USD', + currency='USD', + exchratetype='Intacct Daily Rate' + ) + + assert transaction.transactiontype == 'Sales Order' + assert transaction.datecreated == Date(year='2024', month='6', day='18') + assert transaction.customerid == 'CUST-1000' + assert transaction.sotransitems == items + assert transaction.termname == 'Net 30' + assert transaction.basecurr == 'USD' + assert transaction.currency == 'USD' + assert transaction.exchratetype == 'Intacct Daily Rate' + assert len(transaction.sotransitems.sotransitem) == 2 + client.create(transaction) + + +def test_query_transactions(client): + transactions = client.read_by_query( + 'SODOCUMENT', + 'CUSTVENDID LIKE \'CUST%\'', + fields='*', + pagesize=3, + docparid='Sales Order' + ) + assert isinstance(transactions, list) + assert len(transactions) > 0