Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions pyintacct/models/company.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -14,7 +27,6 @@ class MailAddress(BaseModel):
latitude: Optional[str] = None
longitude: Optional[str] = None


class Contact(API21Object):
contactname: str = ...
printas: Optional[str] = None
Expand Down
96 changes: 95 additions & 1 deletion tests/test_company.py
Original file line number Diff line number Diff line change
@@ -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


Expand Down Expand Up @@ -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
45 changes: 45 additions & 0 deletions tests/test_order_entry.py
Original file line number Diff line number Diff line change
@@ -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