403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/sale/checkout/model/src/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/sale/checkout/model/src/basket.js
import { Vue } from 'ui.vue';
import { VuexBuilderModel } from 'ui.vue.vuex';
import { Type } from 'main.core';
import { Loader as LoaderConst, Product as ProductConst } from 'sale.checkout.const';

export class Basket extends VuexBuilderModel
{
    getName()
    {
        return 'basket';
    }

    getState()
    {
        return {
            basket: [],
            status: LoaderConst.status.none,
            needRefresh: 'N',
            currency: null,
            discount: Basket.getDiscountItem(),
            total: Basket.getTotalItem(),
            errors: []
        }
    }

    getBaseItem()
    {
        return {
            id: 0,
            name: null,
            quantity: 0,
            measureText: null,
            currency: null,
            module: null,
            productProviderClass: null,
            sum: 0.0,           // finalSum,    basket sum with discounts and taxes => basketItem->getPrice() * basketItem->getQuantity()
            price: 0.0,         // finalPrice,  basket price with discounts and taxes => basketItem->getPrice()
            baseSum: 0.0,       // baseSum,     basket sum without discounts and taxes => basketItem->getBasePrice() * basketItem->getQuantity()
            basePrice: 0.0,     // basePrice,   basket price without discounts and taxes => basketItem->getBasePrice()
            discount: Basket.getDiscountItem(),
            props: [],
            sku: Basket.getSkuItem(),
            product: this.getProductItem(),
            deleted: "N",
            status: LoaderConst.status.none,
        };
    }
    
    static getSkuItem()
    {
        return {
            parentProductId: 0,
            tree: {}
        }
    }

    static getPropsItem()
    {
        return {
            code: "",
            id: 0,
            value: "",
            sort: 0,
            name: ""
        };
    }

    static getDiscountItem()
    {
        return {
            sum: 0,  // => (basketItem->getBasePrice() * basketItem->getQuantity()) - (basketItem->getPrice() * basketItem->getQuantity())
            price: 0 // => basketItem->getDiscountPrice();
        };
    }

    static getDiscountTotalItem()
    {
        return {
            sum: 0, // => order->getDiscountPrice() + (basket->getBasePrice() - basket->getPrice())
        };
    }

    static getTotalItem()
    {
        return {
            price: 0.0,     //finalPrice, basket price with discounts and taxes => basket->getPrice()
            basePrice: 0.0, //basePrice,  basket price without discounts => basket->getBasePrice();
        };
    }

    getProductItem()
    {
        return {
            id: 0,
            picture : this.getVariable('product.noImage', null),
            detailPageUrl : "",
            availableQuantity: 0,
            ratio: 0,
			type: ProductConst.type.product,
			checkMaxQuantity: 'N',
        };
    }
    
    static isFloat(value)
    {
        return parseInt(value) !== parseFloat(value);
    }
    
    validate(fields)
    {
        const result = {};

        if (Type.isObject(fields.basket))
        {
            result.basket = this.validateBasket(fields.basket);
        }

        if (Type.isString(fields.status))
        {
            result.status = fields.status.toString()
        }
    
        if (Type.isString(fields.needRefresh))
        {
            result.needRefresh = fields.needRefresh.toString() === 'Y' ? 'Y':'N'
        }

        if (Type.isString(fields.currency))
        {
            result.currency = fields.currency.toString();
        }

        if (Type.isObject(fields.discount))
        {
            result.discount = this.validateTotalDiscount(fields.discount);
        }

        if (Type.isObject(fields.total))
        {
            result.total = this.validateTotal(fields.total);
        }

        return result;
    }

    validateBasket(fields)
    {
        const result = {};

        if (Type.isString(fields.status))
        {
            const allowed = Object.values(LoaderConst.status);

            let status = fields.status.toString();

            result.status = allowed.includes(status) ? status : LoaderConst.status.none;
        }

        if (Type.isString(fields.deleted))
        {
            result.deleted = fields.deleted.toString() === 'Y' ? 'Y':'N';
        }

        if (Type.isNumber(fields.id) || Type.isString(fields.id))
        {
            result.id = parseInt(fields.id);
        }

        if (Type.isString(fields.name))
        {
            result.name = fields.name.toString();
        }

        if (Type.isNumber(fields.quantity) || Type.isString(fields.quantity))
        {
            result.quantity = parseFloat(fields.quantity);
        }

        if (Type.isString(fields.measureText))
        {
            result.measureText = fields.measureText.toString();
        }

        if (Type.isNumber(fields.sum) || Type.isString(fields.sum))
        {
            result.sum = parseFloat(fields.sum);
        }

        if (Type.isNumber(fields.price) || Type.isString(fields.price))
        {
            result.price = parseFloat(fields.price);
        }

        if (Type.isNumber(fields.baseSum) || Type.isString(fields.baseSum))
        {
            result.baseSum = parseFloat(fields.baseSum);
        }

        if (Type.isNumber(fields.basePrice) || Type.isString(fields.basePrice))
        {
            result.basePrice = parseFloat(fields.basePrice);
        }

        if (Type.isString(fields.currency))
        {
            result.currency = fields.currency.toString();
        }

        if (Type.isString(fields.module))
        {
            result.module = fields.module.toString();
        }

        if (Type.isString(fields.productProviderClass))
        {
            result.productProviderClass = fields.productProviderClass.toString();
        }

        if (Type.isObject(fields.product))
        {
            result.product = this.validateProduct(fields.product);
        }
        
        if (Type.isObject(fields.props))
        {
            result.props = [];
            fields.props.forEach((item)=>{
                let fields = this.validateProps(item);
                result.props.push(fields);
            })
        }
    
        if (Type.isObject(fields.sku))
        {
            result.sku = this.validateSku(fields.sku);
        }

        if (Type.isObject(fields.discount))
        {
            result.discount = this.validateDiscount(fields.discount);
        }

        return result;
    }
    
    validateSku(fields)
    {
        const result = {};
        
        if (Type.isObject(fields.tree))
        {
            result.tree = fields.tree;
        }
    
        if (Type.isNumber(fields.parentProductId) || Type.isString(fields.parentProductId))
        {
            result.parentProductId = parseInt(fields.parentProductId);
        }
        
        return result;
    }

    validateDiscount(fields)
    {
        const result = {};

        if (Type.isNumber(fields.sum) || Type.isString(fields.sum))
        {
            result.sum = parseFloat(fields.sum);
        }

        if (Type.isNumber(fields.price) || Type.isString(fields.price))
        {
            result.price = parseFloat(fields.price);
        }

        return result;
    }

    validateTotalDiscount(fields)
    {
        const result = {};

        if (Type.isNumber(fields.sum) || Type.isString(fields.sum))
        {
            result.sum = parseFloat(fields.sum);
        }

        return result;
    }

    validateTotal(fields)
    {
        const result = {};

        if (Type.isNumber(fields.price) || Type.isString(fields.price))
        {
            result.price = parseFloat(fields.price);
        }

        if (Type.isNumber(fields.basePrice) || Type.isString(fields.basePrice))
        {
            result.basePrice = parseFloat(fields.basePrice);
        }

        return result;
    }

    validateProduct(fields)
    {
        const result = {};
        
        try
        {
            for (let field in fields)
            {
                if (!fields.hasOwnProperty(field))
                {
                    continue;
                }

                if (field === 'id')
                {
                    if (Type.isNumber(fields.id) || Type.isString(fields.id))
                    {
                        result[field] = fields.id;
                    }
                }
                else if (field === 'picture')
                {
                    if (Type.isString(fields.picture) && fields.picture.length > 0)
                    {
                        result[field] = fields.picture.toString();
                    }
                }
                else if (field === 'detailPageUrl')
                {
                    if (Type.isString(fields.detailPageUrl))
                    {
                        result[field] = fields.detailPageUrl.toString();
                    }
                }
                else if (field === 'availableQuantity')
                {
                    if (Type.isNumber(fields.availableQuantity) || Type.isString(fields.availableQuantity))
                    {
                        result.availableQuantity = parseFloat(fields.availableQuantity)
                    }
                }
                else if (field === 'ratio')
                {
                    if (Type.isNumber(fields.ratio) || Type.isString(fields.ratio))
                    {
                        result.ratio = parseFloat(fields.ratio)
                    }
                }
				else if (field === 'type')
				{
					if (Type.isString(fields.type))
					{
						const productTypes = Object.values(ProductConst.type);
						const type = fields.type.toString();

						result.type = productTypes.includes(type) ? type : ProductConst.type.product;
					}
				}
				else if (field === 'checkMaxQuantity')
				{
					if (Type.isString(fields.checkMaxQuantity))
					{
						result.checkMaxQuantity = fields.checkMaxQuantity.toString() === 'Y' ? 'Y' : 'N'
					}
				}
                else
                {
                    result[field] = fields[field];
                }
            }
        }
        catch (e) {}

        return result;
    }

    validateProps(fields)
    {
        const result = {};

        if (Type.isNumber(fields.id) || Type.isString(fields.id))
        {
            result.id = parseInt(fields.id);
        }

        if (Type.isString(fields.name))
        {
            result.name = fields.name.toString();
        }

        if (Type.isString(fields.code))
        {
            result.code = fields.code.toString();
        }

        if (Type.isString(fields.value))
        {
            result.value = fields.value.toString();
        }

        if (Type.isNumber(fields.sort) || Type.isString(fields.sort))
        {
            result.sort = parseInt(fields.sort);
        }
        
        return result;
    }
    
    getActions()
    {
        return {
            setTradingPlatformId: ({ commit }, payload) =>
            {
                payload = this.validate(payload);
                commit('setTradingPlatformId', payload);
            },
            setStatus: ({ commit }, payload) =>
            {
                payload = this.validate(payload);

                const allowed = Object.values(LoaderConst.status);

                payload.status = allowed.includes(payload.status) ? payload.status : LoaderConst.status.none;
                commit('setStatus', payload);
            },
            setNeedRefresh: ({ commit }, payload) =>
            {
                payload = this.validate(payload);
                commit('setNeedRefresh', payload);
            },
            addItem: ({ commit }, payload) =>
            {
                payload.fields = this.validateBasket(payload.fields);
                commit('addItem', payload);
            },
            changeItem: ({ commit }, payload) =>
            {
                payload.fields = this.validateBasket(payload.fields);
                commit('updateItem', payload);
            },
            removeItem({ commit }, payload)
            {
                commit('deleteItem', payload);
            },
            setFUserId: ({ commit }, payload) =>
            {
                payload = this.validate(payload);
                commit('setFUserId', payload);
            },
            setCurrency: ({ commit }, payload) =>
            {
                payload = this.validate(payload);
                commit('setCurrency', payload);
            },
            setDiscount: ({ commit }, payload) =>
            {
                payload = this.validateDiscount(payload);
                commit('setDiscount', payload);
            },
            setTotal: ({ commit }, payload) =>
            {
                payload = this.validateTotal(payload);
                commit('setTotal', payload);
            }
        }
    }

    getGetters()
    {
        return {

            getStatus: state =>
            {
                return state.status;
            },
            getNeedRefresh: state =>
            {
                return state.needRefresh;
            },
            get: state => id =>
            {
                if (!state.basket[id] || state.basket[id].length <= 0)
                {
                    return [];
                }

                return state.basket[id];
            },
            getBasket: state =>
            {
                return state.basket;
            },
            getBaseItem: state =>
            {
                return this.getBaseItem();
            },
            getCurrency: state =>
            {
                return state.currency;
            },
            getDiscount: state =>
            {
                return state.discount;
            },
            getTotal: state =>
            {
                return state.total;
            },
            getErrors: state =>
            {
                return state.errors;
            }
        }
    }

    getMutations()
    {
        return {
            setStatus: (state, payload) =>
            {
                let item = { status: LoaderConst.status.none };

                item = Object.assign(item, payload);
                state.status = item.status;
            },
            setNeedRefresh: (state, payload) =>
            {
                let item = { needRefresh: 'N' };
        
                item = Object.assign(item, payload);
                state.needRefresh = item.needRefresh;
            },
            setCurrency: (state, payload) =>
            {
                let item = { currency: null };

                item = Object.assign(item, payload);
                state.currency = item.currency;
            },
            setDiscount: (state, payload) =>
            {
                let item = Basket.getDiscountTotalItem();
                item = Object.assign(item, payload);
                state.discount = Object.assign(item, payload);
            },
            setTotal: (state, payload) =>
            {
                let item = Basket.getTotalItem();
                item = Object.assign(item, payload);
                state.total = Object.assign(item, payload);
            },
            addItem: (state, payload) =>
            {
                let item = this.getBaseItem();

                item = Object.assign(item, payload.fields);
    
                if (Type.isObject(payload.fields.product))
                {
                    item.product = Object.assign(
                        item.product,
                        payload.fields.product
                    )
                }
                
                if (Type.isObject(item.props))
                {
                    item.props.forEach((fields, index)=>{
                        let prop = Basket.getPropsItem();
                        prop = Object.assign(prop, fields);

                        item.props[index] = prop;
                    })
                }
    
                if (Type.isObject(payload.fields.sku))
                {
                    let item = Basket.getSkuItem();
                    item = Object.assign(item, payload.fields.sku);
                    payload.fields.sku = item;
                }

                state.basket.push(item);
                state.basket.forEach((item, index) => {
                    item.sort = index + 1;
                });
            },
            updateItem: (state, payload) =>
            {
                if (typeof state.basket[payload.index] === 'undefined')
                {
                    Vue.set(state.basket, payload.index, this.getBaseItem());
                }
    
                if (Type.isObject(payload.fields.product))
                {
                    payload.fields.product = Object.assign(
                        state.basket[payload.index].product,
                        payload.fields.product
                    )
                }
                
                if (Type.isObject(payload.fields.props))
                {
                    payload.fields.props.forEach((fields, index)=>{
                        let item = Basket.getPropsItem();
                        item = Object.assign(item, fields);

                        payload.fields.props[index] = item;
                    })
                }
    
                if (Type.isObject(payload.fields.sku))
                {
                    let item = Basket.getSkuItem();
                    item = Object.assign(item, payload.fields.sku);
                    payload.fields.sku = item;
                }

                state.basket[payload.index] = Object.assign(
                    state.basket[payload.index],
                    payload.fields
                );
            },
            deleteItem: (state, payload) =>
            {
                // delete state.basket[payload.index];
                state.basket.splice(payload.index, 1);
            },
            clearBasket: (state) =>
            {
                state.basket = [];
            },
            clearDiscount: (state) =>
            {
                state.discount = Basket.getDiscountItem();
            },
            clearTotal: (state) =>
            {
                state.total = Basket.getTotalItem();
            },
            setErrors: (state, payload) =>
            {
                state.errors = payload;
            },
            clearErrors: (state) =>
            {
                state.errors = [];
            }
        }
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit