Skip to content
Merged
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
15 changes: 8 additions & 7 deletions tap_quickbooks/quickbooks/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -571,27 +571,28 @@ def query(self, catalog_entry, state, state_passed):

def query_report(self, catalog_entry, state, state_passed):
start_date = singer_utils.strptime_with_tz(self.get_start_date(state, catalog_entry))

if self.reports_full_sync:
state_passed = None

if catalog_entry["stream"] == "BalanceSheetReport":
reader = BalanceSheetReport(self, start_date, None, state_passed)
reader = BalanceSheetReport(self, start_date, None)
elif catalog_entry["stream"] == "MonthlyBalanceSheetReport":
reader = MonthlyBalanceSheetReport(self, start_date, None, state_passed)
reader = MonthlyBalanceSheetReport(self, start_date, None)
elif catalog_entry["stream"] == "GeneralLedgerAccrualReport":
reader = GeneralLedgerAccrualReport(self, start_date, self.report_periods, state_passed)
elif catalog_entry["stream"] == "GeneralLedgerCashReport":
reader = GeneralLedgerCashReport(self, start_date, self.report_periods, state_passed)
elif catalog_entry["stream"] == "CashFlowReport":
reader = CashFlowReport(self, start_date, None, state_passed)
reader = CashFlowReport(self, start_date, None)
elif catalog_entry["stream"] == "DailyCashFlowReport":
reader = DailyCashFlowReport(self, start_date, None, state_passed)
reader = DailyCashFlowReport(self, start_date, None)
elif catalog_entry["stream"] == "MonthlyCashFlowReport":
reader = MonthlyCashFlowReport(self, start_date, None, state_passed)
reader = MonthlyCashFlowReport(self, start_date, None)
elif catalog_entry["stream"] == "ARAgingSummaryReport":
reader = ARAgingSummaryReport(self, start_date, None, state_passed)
reader = ARAgingSummaryReport(self, start_date, None)
elif catalog_entry["stream"] == "TransactionListReport":
reader = TransactionListReport(self, start_date, None, state_passed)
reader = TransactionListReport(self, start_date, None)
elif catalog_entry["stream"] == "ProfitAndLossReport":
reader = ProfitAndLossReport(self, start_date, self.report_periods, state_passed)
else:
Expand Down
140 changes: 43 additions & 97 deletions tap_quickbooks/quickbooks/reportstreams/BalanceSheetReport.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,103 +49,49 @@ def _recursive_row_search(self, row, output, categories):
categories.pop()

def sync(self, catalog_entry):
full_sync = not self.state_passed and not self.has_number_of_periods

if full_sync:
LOGGER.info(f"Starting full sync of BalanceSheet")
end_date = datetime.date.today()
start_date = self.start_date
params = {
"start_date": start_date.strftime("%Y-%m-%d"),
"end_date": end_date.strftime("%Y-%m-%d"),
"accounting_method": "Accrual"
}

LOGGER.info(f"Fetch BalanceSheet Report for period {params['start_date']} to {params['end_date']}")
resp = self._get(report_entity='BalanceSheet', params=params)

# Get column metadata.
columns = self._get_column_metadata(resp)

# Recursively get row data.
row_group = resp.get("Rows")
row_array = row_group.get("Row")

if row_array is None:
return

output = []
categories = []
for row in row_array:
self._recursive_row_search(row, output, categories)

# Zip columns and row data.
for raw_row in output:
row = dict(zip(columns, raw_row))
if not row.get("Total"):
# If a row is missing the amount, skip it
LOGGER.info(f"Starting full sync of BalanceSheet")
end_date = datetime.date.today()
start_date = self.start_date
params = {
"start_date": start_date.strftime("%Y-%m-%d"),
"end_date": end_date.strftime("%Y-%m-%d"),
"accounting_method": "Accrual"
}

LOGGER.info(f"Fetch BalanceSheet Report for period {params['start_date']} to {params['end_date']}")
resp = self._get(report_entity='BalanceSheet', params=params)

# Get column metadata.
columns = self._get_column_metadata(resp)

# Recursively get row data.
row_group = resp.get("Rows")
row_array = row_group.get("Row")

if row_array is None:
return

output = []
categories = []
for row in row_array:
self._recursive_row_search(row, output, categories)

# Zip columns and row data.
for raw_row in output:
row = dict(zip(columns, raw_row))
if not row.get("Total"):
# If a row is missing the amount, skip it
continue

cleansed_row = {}
for k, v in row.items():
if v == "":
continue
else:
cleansed_row.update({k: v})

cleansed_row = {}
for k, v in row.items():
if v == "":
continue
else:
cleansed_row.update({k: v})

cleansed_row["Total"] = float(row.get("Total"))
cleansed_row["SyncTimestampUtc"] = singer.utils.strftime(singer.utils.now(), "%Y-%m-%dT%H:%M:%SZ")

yield cleansed_row
else:
LOGGER.info(f"Syncing BalanceSheet of last {self.number_of_periods} periods")
end_date = datetime.date.today()

for i in range(self.number_of_periods):
start_date = end_date.replace(day=1)
params = {
"start_date": start_date.strftime("%Y-%m-%d"),
"end_date": end_date.strftime("%Y-%m-%d"),
"accounting_method": "Accrual"
}

LOGGER.info(f"Fetch BalanceSheet for period {params['start_date']} to {params['end_date']}")
resp = self._get(report_entity='BalanceSheet', params=params)

# Get column metadata.
columns = self._get_column_metadata(resp)

# Recursively get row data.
row_group = resp.get("Rows")
row_array = row_group.get("Row")

if row_array is None:
# Update end date
end_date = start_date - datetime.timedelta(days=1)
continue

output = []
categories = []
for row in row_array:
self._recursive_row_search(row, output, categories)

# Zip columns and row data.
for raw_row in output:
row = dict(zip(columns, raw_row))
if not row.get("Total"):
# If a row is missing the amount, skip it
continue

cleansed_row = {}
for k, v in row.items():
if v == "":
continue
else:
cleansed_row.update({k: v})

cleansed_row["Total"] = float(row.get("Total"))
cleansed_row["SyncTimestampUtc"] = singer.utils.strftime(singer.utils.now(), "%Y-%m-%dT%H:%M:%SZ")

yield cleansed_row
cleansed_row["Total"] = float(row.get("Total"))
cleansed_row["SyncTimestampUtc"] = singer.utils.strftime(singer.utils.now(), "%Y-%m-%dT%H:%M:%SZ")

end_date = start_date - datetime.timedelta(days=1)
yield cleansed_row

2 changes: 1 addition & 1 deletion tap_quickbooks/quickbooks/reportstreams/BaseReport.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

class BaseReportStream(QuickbooksStream):

def __init__(self, qb, start_date, report_periods, state_passed):
def __init__(self, qb, start_date, report_periods, state_passed=None):
self.qb = qb
self.start_date = start_date
self.has_number_of_periods = report_periods is not None
Expand Down
140 changes: 43 additions & 97 deletions tap_quickbooks/quickbooks/reportstreams/CashFlowReport.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,103 +50,49 @@ def _recursive_row_search(self, row, output, categories):
categories.pop()

def sync(self, catalog_entry):
full_sync = not self.state_passed and not self.has_number_of_periods

if full_sync:
LOGGER.info(f"Starting full sync of CashFlow")
end_date = datetime.date.today()
start_date = self.start_date
params = {
"start_date": start_date.strftime("%Y-%m-%d"),
"end_date": end_date.strftime("%Y-%m-%d"),
"accounting_method": "Accrual"
}

LOGGER.info(f"Fetch CashFlow Report for period {params['start_date']} to {params['end_date']}")
resp = self._get(report_entity='CashFlow', params=params)

# Get column metadata.
columns = self._get_column_metadata(resp)

# Recursively get row data.
row_group = resp.get("Rows")
row_array = row_group.get("Row")

if row_array is None:
return

output = []
categories = []
for row in row_array:
self._recursive_row_search(row, output, categories)

# Zip columns and row data.
for raw_row in output:
row = dict(zip(columns, raw_row))
if not row.get("Total"):
# If a row is missing the amount, skip it
LOGGER.info(f"Starting full sync of CashFlow")
end_date = datetime.date.today()
start_date = self.start_date
params = {
"start_date": start_date.strftime("%Y-%m-%d"),
"end_date": end_date.strftime("%Y-%m-%d"),
"accounting_method": "Accrual"
}

LOGGER.info(f"Fetch CashFlow Report for period {params['start_date']} to {params['end_date']}")
resp = self._get(report_entity='CashFlow', params=params)

# Get column metadata.
columns = self._get_column_metadata(resp)

# Recursively get row data.
row_group = resp.get("Rows")
row_array = row_group.get("Row")

if row_array is None:
return

output = []
categories = []
for row in row_array:
self._recursive_row_search(row, output, categories)

# Zip columns and row data.
for raw_row in output:
row = dict(zip(columns, raw_row))
if not row.get("Total"):
# If a row is missing the amount, skip it
continue

cleansed_row = {}
for k, v in row.items():
if v == "":
continue
else:
cleansed_row.update({k: v})

cleansed_row = {}
for k, v in row.items():
if v == "":
continue
else:
cleansed_row.update({k: v})

cleansed_row["Total"] = float(row.get("Total"))
cleansed_row["SyncTimestampUtc"] = singer.utils.strftime(singer.utils.now(), "%Y-%m-%dT%H:%M:%SZ")

yield cleansed_row
else:
LOGGER.info(f"Syncing CashFlow of last {self.number_of_periods} periods")
end_date = datetime.date.today()

for i in range(self.number_of_periods):
start_date = end_date.replace(day=1)
params = {
"start_date": start_date.strftime("%Y-%m-%d"),
"end_date": end_date.strftime("%Y-%m-%d"),
"accounting_method": "Accrual"
}

LOGGER.info(f"Fetch CashFlow for period {params['start_date']} to {params['end_date']}")
resp = self._get(report_entity='CashFlow', params=params)

# Get column metadata.
columns = self._get_column_metadata(resp)

# Recursively get row data.
row_group = resp.get("Rows")
row_array = row_group.get("Row")

if row_array is None:
# Update end date
end_date = start_date - datetime.timedelta(days=1)
continue

output = []
categories = []
for row in row_array:
self._recursive_row_search(row, output, categories)

# Zip columns and row data.
for raw_row in output:
row = dict(zip(columns, raw_row))
if not row.get("Total"):
# If a row is missing the amount, skip it
continue

cleansed_row = {}
for k, v in row.items():
if v == "":
continue
else:
cleansed_row.update({k: v})

cleansed_row["Total"] = float(row.get("Total"))
cleansed_row["SyncTimestampUtc"] = singer.utils.strftime(singer.utils.now(), "%Y-%m-%dT%H:%M:%SZ")

yield cleansed_row
cleansed_row["Total"] = float(row.get("Total"))
cleansed_row["SyncTimestampUtc"] = singer.utils.strftime(singer.utils.now(), "%Y-%m-%dT%H:%M:%SZ")

end_date = start_date - datetime.timedelta(days=1)
yield cleansed_row

Loading