def _posting_list_table(self, canvas, x1, y1, x2, y2, shipping_labels): style = self.table_style[:] table = [self.table_header] for i, shipping_label in enumerate(shipping_labels, start=1): row = ( str(shipping_label.tracking_code), str(shipping_label.receiver.zip_code), str(shipping_label.package.posting_weight), self.yes if ExtraService.get(EXTRA_SERVICE_AR) in shipping_label else self.no, self.yes if ExtraService.get(EXTRA_SERVICE_MP) in shipping_label else self.no, self.yes if shipping_label.has_declared_value() else self.no, str(shipping_label.value).replace(".", ",") if shipping_label.value is not None else "", str(shipping_label.invoice_number), shipping_label.get_package_sequence(), shipping_label.receiver.name[:self.max_receiver_name_size], ) # noinspection PyTypeChecker table.append(row) if i % 2: style.append(('BACKGROUND', (0, i), (-1, i), colors.lightgrey)) table_flow = Table( table, colWidths=self.col_widths, style=TableStyle(style), ) w, h = table_flow.wrap(0, 0) table_flow.drawOn(canvas, x1, y2 - h - 50 * mm)
def _posting_list_table(self, canvas, x1, y1, x2, y2, shipping_labels): style = self.table_style[:] table = [self.table_header] for i, shipping_label in enumerate(shipping_labels, start=1): row = ( str(shipping_label.tracking_code), str(shipping_label.receiver.zip_code), str(shipping_label.package.weight), self.yes if ExtraService.get(EXTRA_SERVICE_AR) in shipping_label else self.no, self.yes if ExtraService.get(EXTRA_SERVICE_MP) in shipping_label else self.no, self.yes if shipping_label.has_declared_value() else self.no, str(shipping_label.value).replace(".", ",") if shipping_label.value is not None else "", str(shipping_label.invoice_number), shipping_label.get_package_sequence(), shipping_label.receiver.name[:self.max_receiver_name_size], ) # noinspection PyTypeChecker table.append(row) if i % 2: style.append(("BACKGROUND", (0, i), (-1, i), colors.lightgrey)) table_flow = Table(table, colWidths=self.col_widths, style=TableStyle(style)) w, h = table_flow.wrap(0, 0) table_flow.drawOn(canvas, x1, y2 - h - 50 * mm)
def test_basic_extra_service(): extra_service = ExtraService(1, "AR", "Aviso de Recebimento") assert extra_service.number == 1 assert extra_service.code == "AR" assert extra_service.name == "Aviso de Recebimento" assert extra_service.display_on_label is True assert repr(extra_service) == "<ExtraService number=1, code='AR'>" assert extra_service == 1
def test_declared_value(extra_service_vd, code, posting_list, shipping_label): shipping_label.extra_services.append(ExtraService.get(extra_service_vd)) shipping_label.real_value = 10.29 posting_list.add_shipping_label(shipping_label) serializer = PostingListSerializer() document = serializer.get_document(posting_list) serializer.validate(document) xml = serializer.get_xml(document) assert shipping_label.service == Service.get(SERVICE_PAC) assert b"<codigo_servico_adicional>%b</codigo_servico_adicional>" % code in xml assert b"<valor_declarado>19,50</valor_declarado>" in xml
def test_declared_value(posting_list, shipping_label): shipping_label.extra_services.append(ExtraService.get(EXTRA_SERVICE_VD)) shipping_label.real_value = 10.29 posting_list.add_shipping_label(shipping_label) serializer = correios.PostingListSerializer() document = serializer.get_document(posting_list) serializer.validate(document) xml = serializer.get_xml(document) assert shipping_label.service == Service.get(SERVICE_PAC) assert b"<codigo_servico_adicional>019</codigo_servico_adicional>" in xml assert b"<valor_declarado>18,00</valor_declarado>" in xml
def test_shipping_label_with_declared_value(extra_service_vd, posting_card, sender_address, receiver_address, package): service = Service.get(SERVICE_SEDEX) shipping_label = posting.ShippingLabel( posting_card=posting_card, sender=sender_address, receiver=receiver_address, service=service, package=package, tracking_code="PD12345678 BR", value=service.max_declared_value - Decimal("1.00"), extra_services=[extra_service_vd], ) assert ExtraService.get(extra_service_vd) in shipping_label.extra_services
def test_shipping_label_with_declared_value(posting_card, sender_address, receiver_address, package): service = Service.get(SERVICE_SEDEX) shipping_label = posting.ShippingLabel( posting_card=posting_card, sender=sender_address, receiver=receiver_address, service=service, package=package, tracking_code="PD12345678 BR", value=service.max_declared_value - Decimal("1.00"), extra_services=[EXTRA_SERVICE_VD], ) assert ExtraService.get(EXTRA_SERVICE_VD) in shipping_label.extra_services
def test_fail_shipping_label_with_invalid_declared_value(posting_card, sender_address, receiver_address, package): service = Service.get(SERVICE_SEDEX) shipping_label = posting.ShippingLabel( posting_card=posting_card, sender=sender_address, receiver=receiver_address, service=service, package=package, tracking_code="PD12345678 BR", value=service.max_declared_value + Decimal("1.00"), ) with pytest.raises(exceptions.MaximumDeclaredValueError): shipping_label.add_extra_service(ExtraService.get(EXTRA_SERVICE_VD))
def test_fail_shipping_label_with_invalid_declared_value(posting_card, sender_address, receiver_address, package): service = Service.get(SERVICE_SEDEX) shipping_label = posting.ShippingLabel( posting_card=posting_card, sender=sender_address, receiver=receiver_address, service=service, package=package, tracking_code="PD12345678 BR", value=service.max_declared_value + Decimal("1.00"), ) with pytest.raises(exceptions.MaximumDeclaredValueError): shipping_label.add_extra_service(ExtraService.get(EXTRA_SERVICE_VD_SEDEX))
def test_extra_service_getter(number, extra_service_code): assert ExtraService.get(number).code == extra_service_code
def test_fail_get_unknown_service(): with pytest.raises(KeyError): ExtraService.get(0)
def test_fail_extra_service_invalid_data(number, code, name): with pytest.raises(InvalidExtraServiceError): ExtraService(number, code, name)
def test_extra_service_sanitize_code(): extra_service = ExtraService(1, "ar", "Aviso de Recebimento") assert extra_service.code == "AR"
def test_fail_extra_service_invalid_data(number, code, name): with pytest.raises(InvalidExtraServiceError): ExtraService(number, code, name) def test_fail_get_unknown_service(): with pytest.raises(KeyError): ExtraService.get(0) @pytest.mark.parametrize("number,extra_service_code", ( (1, "AR"), (2, "MP"), (19, "VD"), (25, "RR"), (ExtraService.get(EXTRA_SERVICE_AR), "AR"), )) def test_extra_service_getter(number, extra_service_code): assert ExtraService.get(number).code == extra_service_code def test_basic_regional_direction(): regional_direction = RegionalDirection(1, "AC", "AC - ADMINISTRAÇAO CENTRAL") assert regional_direction.number == 1 assert regional_direction.code == "AC" assert regional_direction.name == "AC - ADMINISTRAÇAO CENTRAL" assert repr(regional_direction) == "<RegionalDirection number=1, code='AC'>" def test_regional_direction_sanitize_code(): regional_direction = RegionalDirection(1, "ac", "AC - ADMINISTRAÇAO CENTRAL")
def test_extra_service_is_declared_value(number, code, description, is_declared_value): extra_service = ExtraService(number, code, description) assert extra_service.is_declared_value() == is_declared_value
def test_basic_shipping_label(posting_card, sender_address, receiver_address, tracking_code, package): shipping_label = posting.ShippingLabel( posting_card=posting_card, sender=sender_address, receiver=receiver_address, service=SERVICE_SEDEX, extra_services=[EXTRA_SERVICE_AR], tracking_code=tracking_code, logo=os.path.join(FIXTURESDIR, "test_logo.jpg"), order="123", invoice_number="321", invoice_series="A1", invoice_type="", package=package, text="Hello World!", latitude=-25.4131980, longitude=-49.2584896, ) assert shipping_label.posting_card == posting_card assert shipping_label.sender == sender_address assert shipping_label.receiver == receiver_address assert shipping_label.service == Service.get(SERVICE_SEDEX) assert shipping_label.get_service_name() == "SEDEX" assert shipping_label.extra_services == [ExtraService.get(EXTRA_SERVICE_RR), ExtraService.get(EXTRA_SERVICE_AR)] assert shipping_label.tracking_code == tracking_code assert shipping_label.get_tracking_code().replace(" ", "") == str(shipping_label.tracking_code) assert isinstance(shipping_label.logo, Image) # noinspection PyUnresolvedReferences assert shipping_label.logo.filename == os.path.join(FIXTURESDIR, "test_logo.jpg") assert shipping_label.order == "123" assert shipping_label.get_order() == "123" assert shipping_label.invoice_number == "321" assert shipping_label.get_invoice() == "321" assert shipping_label.get_contract_number() == "9911222777" assert shipping_label.get_package_sequence() == "{}/{}".format(*shipping_label.package.sequence) assert shipping_label.get_weight() == "{}g".format(shipping_label.package.weight) assert shipping_label.package.posting_list_volumetric_weight == Decimal("0.00") assert shipping_label.text == "Hello World!" assert shipping_label.latitude == -25.4131980 assert shipping_label.longitude == -49.2584896 assert shipping_label.posting_list_group == 0 assert shipping_label.get_symbol_filename().endswith("/express.gif") assert isinstance(shipping_label.symbol, Image) assert len(shipping_label.get_datamatrix_info()) == 164 # datamatrix info size accordingly with documentation assert shipping_label.get_sender_data().count("<br/>") >= 2 assert shipping_label.get_receiver_data().count("<br/>") >= 2 assert repr(shipping_label) == "<ShippingLabel tracking='{!s}'>".format(shipping_label.tracking_code)
def test_basic_shipping_label(posting_card, sender_address, receiver_address, tracking_code, package): shipping_label = posting.ShippingLabel( posting_card=posting_card, sender=sender_address, receiver=receiver_address, service=SERVICE_SEDEX, extra_services=[EXTRA_SERVICE_AR], tracking_code=tracking_code, logo=os.path.join(FIXTURESDIR, "test_logo.jpg"), order="123", invoice_number="321", invoice_series="A1", invoice_type="", package=package, text="Hello World!", latitude=-25.4131980, longitude=-49.2584896, ) assert shipping_label.posting_card == posting_card assert shipping_label.sender == sender_address assert shipping_label.receiver == receiver_address assert shipping_label.service == Service.get(SERVICE_SEDEX) assert shipping_label.get_service_name() == "SEDEX" assert shipping_label.extra_services == [ ExtraService.get(EXTRA_SERVICE_RR), ExtraService.get(EXTRA_SERVICE_AR) ] assert shipping_label.tracking_code == tracking_code assert shipping_label.get_tracking_code().replace(" ", "") == str( shipping_label.tracking_code) assert isinstance(shipping_label.logo, Image) # noinspection PyUnresolvedReferences assert shipping_label.logo.filename == os.path.join( FIXTURESDIR, "test_logo.jpg") assert shipping_label.order == "123" assert shipping_label.get_order() == "123" assert shipping_label.invoice_number == "321" assert shipping_label.get_invoice() == "321" assert shipping_label.get_contract_number() == "9911222777" assert shipping_label.get_package_sequence() == "{}/{}".format( *shipping_label.package.sequence) assert shipping_label.get_weight() == "{}g".format( shipping_label.package.weight) assert shipping_label.package.posting_list_volumetric_weight == Decimal( "0.00") assert shipping_label.text == "Hello World!" assert shipping_label.latitude == -25.4131980 assert shipping_label.longitude == -49.2584896 assert shipping_label.posting_list_group == 0 assert shipping_label.get_symbol_filename().endswith("/express.gif") assert isinstance(shipping_label.symbol, Image) assert len(shipping_label.get_datamatrix_info() ) == 164 # datamatrix info size accordingly with documentation assert shipping_label.get_sender_data().count("<br/>") >= 2 assert shipping_label.get_receiver_data().count("<br/>") >= 2 assert repr(shipping_label) == "<ShippingLabel tracking='{!s}'>".format( shipping_label.tracking_code)
with pytest.raises(InvalidExtraServiceError): ExtraService(number, code, name) def test_fail_get_unknown_service(): with pytest.raises(KeyError): ExtraService.get(0) @pytest.mark.parametrize("number,extra_service_code", ( (1, "AR"), (2, "MP"), (25, "RR"), (19, "VD"), (64, "VD"), (ExtraService.get(EXTRA_SERVICE_AR), "AR"), )) def test_extra_service_getter(number, extra_service_code): assert ExtraService.get(number).code == extra_service_code def test_basic_regional_direction(): regional_direction = RegionalDirection(1, "AC", "AC - ADMINISTRAÇAO CENTRAL") assert regional_direction.number == 1 assert regional_direction.code == "AC" assert regional_direction.name == "AC - ADMINISTRAÇAO CENTRAL" assert repr(regional_direction) == "<RegionalDirection number=1, code='AC'>" def test_regional_direction_sanitize_code(): regional_direction = RegionalDirection(1, "ac", "AC - ADMINISTRAÇAO CENTRAL")