コード例 #1
0
ファイル: pdf.py プロジェクト: solidarium/correios
    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)
コード例 #2
0
    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)
コード例 #3
0
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
コード例 #4
0
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
コード例 #5
0
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
コード例 #6
0
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
コード例 #7
0
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
コード例 #8
0
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))
コード例 #9
0
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))
コード例 #10
0
def test_extra_service_getter(number, extra_service_code):
    assert ExtraService.get(number).code == extra_service_code
コード例 #11
0
def test_fail_get_unknown_service():
    with pytest.raises(KeyError):
        ExtraService.get(0)
コード例 #12
0
def test_fail_extra_service_invalid_data(number, code, name):
    with pytest.raises(InvalidExtraServiceError):
        ExtraService(number, code, name)
コード例 #13
0
def test_extra_service_sanitize_code():
    extra_service = ExtraService(1, "ar", "Aviso de Recebimento")
    assert extra_service.code == "AR"
コード例 #14
0
def test_extra_service_getter(number, extra_service_code):
    assert ExtraService.get(number).code == extra_service_code
コード例 #15
0
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")
コード例 #16
0
def test_fail_get_unknown_service():
    with pytest.raises(KeyError):
        ExtraService.get(0)
コード例 #17
0
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
コード例 #18
0
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)
コード例 #19
0
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)
コード例 #20
0
    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")