serviceData.append([ipAddress.ipAddress, ipAddress.ipAssignmentType, ipAddress.allocationHours, str(locale.currency(val=ipAddress.allocationCost, symbol=False, grouping=True))])

return len(ipAddresses.ipAddressUsageDetail)

def get_servicetable(self, service):

serviceinfotable = [[]]

serviceinfotable[0] = ["Service", get_servicename(service)] serviceinfotable.append(["Organization", get_organization(service)]) serviceinfotable.append(["Billing code", get_billingcode(service)]) serviceinfotable.append(["Owner", get_owner(service)]) serviceinfotable.append(["Created on", get_startdate(service)]) serviceinfotable.append(["Deleted on", get_enddate(service)])

tService = Table(serviceinfotable, style=[('LINEABOVE', (0, 0), (-1, 0), 0.25, colors.black), ('LINEBELOW', (0, -1), (-1, -1), 0.25, colors.black), ('FONTSIZE', (0, 0), (-1, -1), 6),

('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), ('BOX', (0, 0), (-1, -1), 0.25, colors.black), ('BACKGROUND', (0, 0), (1, 0), colors.blue), ('TEXTCOLOR', (0, 0), (1, 0), colors.white)])

tService.hAlign = "LEFT" return tService

def get_servicedetailstable(self, service): tServiceData = [[]]

tServiceData[0] = ["Fixed Cost ($)", str(locale.currency(val=service.resourceUsageDetail.fixedCost, symbol=False, grouping=True)), "", ""]

s = 2 + self.addserversdetails(service.resourceUsageDetail.servers, tServiceData) d = s + self.adddisksdetails(service.resourceUsageDetail.disks, tServiceData) + 2 self.addipaddressesdetails(service.resourceUsageDetail.ipAddresses, tServiceData)

tService = Table(tServiceData, style = [('LINEBELOW', (0, 0), (-1, 0), 0.5, colors.black), ('SPAN',(1,0),(-1,0)),

('FONTSIZE', (0, 0), (-1, -1), 6),

('LINEBELOW', (0, 1), (-1, 1), 0.5, colors.black), ('LINEABOVE', (0, 1), (-1, 1), 0.5, colors.black), ('SPAN',(0,1),(-1,1)),

('LINEBELOW', (0, s+1), (-1, s+1), 0.5, colors.black), ('LINEABOVE', (0, s+1), (-1, s+1), 0.5, colors.black), ('SPAN',(0,s+1),(-1,s+1)),

('LINEBELOW', (0, d+1), (-1, d+1), 0.5, colors.black), ('LINEABOVE', (0, d+1), (-1, d+1), 0.5, colors.black), ('SPAN',(0,d+1),(-1,d+1)),

('BOX', (0, 0), (-1, -1), 0.25, colors.black), ('TEXTCOLOR', (0, 0), (-1, -1), colors.black)])

tService.hAlign = "LEFT" return tService

def format_data(self):

dataPeriod = self.period.getPeriodObj(self.chargebackservice) paging = self.chargebackservice.factory.create('paging') paging.pageIndex = PAGE_INDEX

paging.pageSize = PAGE_SIZE Elements = []

if self.chargebackservice : filters = []

if self.filters :

filters = self.filters.getFiltersObj(self.chargebackservice)

if len(filters) > 0:

print "[" + str(datetime.datetime.now()) + "]" + "getServiceUsageDetailPage: start"

result = self.chargebackservice.service.getServiceUsageDetailPage(dataPeriod, paging, filters)

print "[" + str(datetime.datetime.now()) + "]" + "getServiceUsageDetailPage: end" else:

result = self.chargebackservice.service.getServiceUsageDetailPage(dataPeriod, paging)

if (result.pagingInformation) and (result.serviceUsageDetail) and (len(result.serviceUsageDetail)

> 0) :

pages = result.pagingInformation services = result.serviceUsageDetail

Elements.extend(report_Summary(len(services), self.period))

Elements.append(Paragraph(''' ''', styleSheet["BodyText"]))

for service in services: Elements.append(self.get_servicetable(service)) Elements.append(Paragraph(''' ''', styleSheet["BodyText"])) Elements.append(self.get_servicedetailstable(service)) Elements.append(PageBreak())

else:

print "Result: " + result

return Elements

def generate (self, outputfile):

usageReport = root.reports.reports.Report(self.title, self.footer)

101