Ссылка на счёт для юридических лиц

Материал из Umicms
Версия от 10:25, 8 февраля 2013; Davidov (обсуждение | вклад) (Новая страница: «При оформлении заказа и выборе способа оплаты "Счёт для юридических лиц" после заполнения …»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

При оформлении заказа и выборе способа оплаты "Счёт для юридических лиц" после заполнения формы для данных юридического лица происходит редирект на счёт для юридических лиц, после этого его открыть повторно не получается. Для добавления возможности давать клиентам ссылку на выставленный счёт можно написать кастомный макрос и соответствующий шаблон для него. Откроем файл ~/classes/modules/emarket/__custom.php и сразу после строки "//TODO: Write here your own macroses" добавим код

<?php
public function yur_order_printable($order_id) {
        $objectsCollection = umiObjectsCollection::getInstance();
        $object=$objectsCollection->getObject($order_id);
        $orderId = $object->getId();
        $uri = "uobject://{$orderId}/?transform=sys-tpls/emarket-invoice-printable.xsl";
        $result = file_get_contents($uri);
        $buffer = outputBuffer::current();
        $buffer->charset('utf-8');
        $buffer->contentType('text/html');
        $buffer->clear();
        $buffer->push($result);
        $buffer->end();
        return;
    }
?>

Далее создадим в директории с XSLT шаблонами файл emarket-invoice-printable.xsl и поместим в него следующий код:

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet	version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:php="http://php.net/xsl"
                xsl:extension-element-prefixes="php"
                exclude-result-prefixes="php">

    <xsl:output encoding="utf-8" method="html" indent="yes"/>

    <xsl:template match="/">
        <xsl:apply-templates />
    </xsl:template>
	
    <xsl:template match="/udata/object">
        <xsl:variable name="person" select="document(concat('uobject://', //property[@name='legal_person']/value/item/@id))/udata/object" />
        <xsl:variable name="order-info" select="document(concat('udata://emarket/order/',@id))/udata" />
        <xsl:variable name="payment" select="document(concat('uobject://',properties/group/property[@name='payment_id']/value/item/@id))" />
        <xsl:variable name="delivery" select="properties/group[@name='order_delivery_props']" />
        <html>
            <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <title>
                    <xsl:value-of select="@name" />
                </title>
								
                <style type="text/css">
                    table td {
                    border: 1px solid black;
                    }
                </style>
            </head>
            <body id="invoice">
                <div style="width:620px;"><!--hr/-->
                </div>
                <table bgcolor="#FFFFFF" width="620" height="1000" cellpadding="1" cellspacing="0" border="1">
                    <tr align="left" valign="top" style="font-family:Arial;font-size:13px;">
                        <td colspan="4">
                            <u>
                                <b>
                                    <xsl:value-of select="$payment//property[@name='name']/value" />
                                </b>
                            </u>
                            <br/>
                            <br/>
                            <b>Адрес: 
                                <xsl:value-of select="$payment//property[@name='legal_address']/value" />, тел.: 
                                <xsl:value-of select="$payment//property[@name='phone_number']/value" />
                            </b>
                            <br/>
                            <br/>
                            <table class="tbl" width="620" cellpadding="2" cellspacing="0" border="0" bordercolor="#000000" style="font-family:Arial;font-size:13px;">
                                <tr>
                                    <td width="175" align="left" valign="top">ИНН 
                                        <xsl:value-of select="$payment//property[@name='inn']/value" />
                                    </td>
                                    <td width="175" align="left" valign="top">КПП 
                                        <xsl:value-of select="$payment//property[@name='kpp']/value" />
                                    </td>
                                    <td width="54" align="center" valign="bottom" rowspan="2">Сч. №</td>
                                    <td width="216" align="left" valign="bottom" rowspan="2">
                                        <xsl:value-of select="$payment//property[@name='account']/value" />
                                    </td>
                                </tr>
                                <tr>
                                    <td width="350" align="left" valign="top" colspan="2">
                                        Получатель
                                        <br/>
                                        <xsl:value-of select="$payment//property[@name='name']/value" />
                                    </td>
                                </tr>
                                <tr>
                                    <td align="left" valign="top" rowspan="2" colspan="2">
                                        Банк получателя
                                        <br/>
                                        <xsl:value-of select="$payment//property[@name='bank']/value" />

                                    </td>
                                    <td align="center" valign="top">БИК</td>
                                    <td align="left" valign="top" style="border-bottom-width:0px;">
                                        <xsl:value-of select="$payment//property[@name='bik']/value" />
                                    </td>
                                </tr>
                                <tr>
                                    <td align="center" valign="top">Сч. №</td>
                                    <td align="left" valign="top" style="border-top-width:0px;">
                                        <xsl:value-of select="$payment//property[@name='bank_account']/value" />
                                    </td>
                                </tr>
                            </table>
                            <br/>
                            <br/>
                            <center style="font:16 Arial;font-weight:bold;">СЧЕТ № И/
                                <xsl:value-of select="/udata/object/@id" />/П от 
                                <xsl:value-of select="php:function('dateToString', number(//property[@name='order_date']/value/@unix-timestamp))" />.
                            </center>
                            <br/>
                            <br/>
                            <table cellpadding="4" cellspacing="0" border="0" style="font-family:Arial;font-size:13px;">
                                <tr>
                                    <td>
                                        Покупатель: ИНН 
                                        <xsl:value-of select="$person//property[@name='inn']/value" />
                                        , КПП 
                                        <xsl:value-of select="$person//property[@name='kpp']/value" />
                                        , 
                                        <xsl:value-of select="$person//property[@name='name']/value" />
                                        , 
                                        <xsl:value-of select="$person//property[@name='legal_address']/value" />
                                        , тел: 
                                        <xsl:value-of select="$person//property[@name='phone_number']/value" />
                                        , факс: 
                                        <xsl:value-of select="$person//property[@name='fax']/value" />
                                    </td>
                                </tr>
                                <tr>
                                    <td><!--&nbsp;-->
                                    </td>
                                </tr>
                            </table>
                            <table class="tbl" width="620" cellpadding="3" cellspacing="0" border="0" bordercolor="#000000" style="font-family:Arial;font-size:13px;">
                                <tr>
                                    <td width="20" align="center" valign="top"></td>
                                    <td width="300" align="left" valign="top">Товар</td>
                                    <td width="65" align="left" valign="top">Кол-во</td>
                                    <td width="65" align="left" valign="top">Ед.</td>
                                    <td width="85" align="center" valign="top">Цена</td>
                                    <td width="85" align="center" valign="top">Сумма</td>
                                </tr>

                                <xsl:apply-templates select="//property[@name='order_items']/value/item" mode="order-items" />

                                <xsl:variable name="total_original_price" select="//property[@name='total_original_price']/value" />
                                <xsl:variable name="total_price" select="//property[@name='total_price']/value" />
                                <!--xsl:variable name="delivery" select="//property[@name='delivery_price']/value" /-->
                                <xsl:variable name="discount" select="$total_original_price + $delivery - $total_price" />

                                <xsl:if test="$discount &gt; 0">
                                    <tr>
                                        <td align="right" valign="top" colspan="5">
                                            <b>Скидка:</b>
                                        </td>
                                        <td align="right" valign="top">
                                            <xsl:value-of select="format-number($discount, '#.00')" />
                                        </td>
                                    </tr>
                                </xsl:if>

                                <xsl:apply-templates select="//property[@name='delivery_price']/value" mode="delivery" />

                                <tr>
                                    <td align="right" valign="top" colspan="5">
                                        <b>Итого:</b>
                                    </td>
                                    <td align="right" valign="top">
                                        <xsl:value-of select="format-number(//property[@name='total_price']/value, '#.00')" />
                                    </td>
                                </tr>
                                <tr>
                                    <td colspan="5" align="right" valign="top">
                                        <b>Без налога (НДС).</b>
                                    </td>
                                    <td align="center" valign="top">-</td>
                                </tr>
                                <tr>
                                    <td colspan="5" align="right" valign="top">
                                        <b>Всего к оплате:</b>
                                    </td>
                                    <td align="right" valign="top">
                                        <xsl:value-of select="format-number(//property[@name='total_price']/value, '#.00')" />
                                    </td>
                                </tr>
                            </table>
                            <br/>
                            <br/>
                            <p style="font-family:Arial;font-size:13px;">
                                Всего наименований 
                                <xsl:value-of select="//property[@name='total_amount']/value" />, на сумму 
                                <xsl:value-of select="format-number(//property[@name='total_price']/value, '#.00')" /> руб.
                                <br/>
                                <b>(
                                    <xsl:value-of select="php:function('sumToString', number(//property[@name='total_price']/value))" />)
                                </b>
                            </p>

                            <img>
                                <xsl:attribute name="src">
                                    <xsl:value-of select="$payment//property[@name='sign_image']/value" />
                                </xsl:attribute>
                            </img>
                        </td>
                    </tr>
                </table>
            </body>
        </html>
    </xsl:template>
    
    <xsl:template match="item" mode="order-items">
        <xsl:variable name="object" select="document(concat('uobject://', @id))/udata/object" />
        <tr>
            <td width="20" align="center" valign="top">
                <xsl:value-of select="position()" />
            </td>
            <td width="300" align="left" valign="top">
                <xsl:value-of select="$object/@name" />
            </td>
            <td width="65" align="left" valign="top">
                <xsl:value-of select="$object//property[@name='item_amount']/value" />
            </td>
            <td width="65" align="left" valign="top">шт.</td>
            <td width="85" align="center" valign="top">
                <xsl:value-of select="format-number($object//property[@name='item_price']/value, '#.00')" />
            </td>
            <td width="85" align="center" valign="top">
                <xsl:value-of select="format-number($object//property[@name='item_total_price']/value, '#.00')" />
            </td>
        </tr>
    </xsl:template>

    <xsl:template match="value[.='0']" mode="delivery" />
    <xsl:template match="value" mode="delivery">
        <tr>
            <td align="right" valign="top" colspan="5">
                <b>Доставка:</b>
            </td>
            <td align="right" valign="top">
                <xsl:value-of select="format-number(., '#.00')" />
            </td>
        </tr>
    </xsl:template>
	
</xsl:stylesheet>

Теперь, чтобы макрос мог исполнятся простыми пользователями, необходимо добавить соответствующую запись в файл permissions.custom.php в той же директории.

<?php
$permissions = array('purchasing' => array(
        'yur_order_printable'
        ));
?>

теперь, достаточно в письме пользователю указать ссылку вида http://ваш_домен/emarket/yur_order_printable/id_заказа/.