Subversion Repositories SmartDukaan

Rev

Rev 12648 | Rev 12665 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 12648 Rev 12663
Line 25... Line 25...
25
    PrivateDeals, AmazonOutOfSync, PrivateDealsPriceComparison, \
25
    PrivateDeals, AmazonOutOfSync, PrivateDealsPriceComparison, \
26
    SourceReturnPercentage, CompetitorPricing, CompetitorPricingRequest, \
26
    SourceReturnPercentage, CompetitorPricing, CompetitorPricingRequest, \
27
    AmazonPromotion, ExclusiveAffiliateItemInfo, OutboundAffiliateMaster
27
    AmazonPromotion, ExclusiveAffiliateItemInfo, OutboundAffiliateMaster
28
from shop2020.thriftpy.model.v1.catalog.ttypes import status, ItemShippingInfo, \
28
from shop2020.thriftpy.model.v1.catalog.ttypes import status, ItemShippingInfo, \
29
    ItemType, PremiumType, FreebieItem as t_FreebieItem, \
29
    ItemType, PremiumType, FreebieItem as t_FreebieItem, \
30
    StorePricing as tStorePricing, CatalogServiceException, BannerType, InsurerType, \
30
    StorePricing as tStorePricing, CatalogServiceException, \
31
    Banner as t_banner, CompetitorPricing as TCompetitorPricing
31
    BannerType, InsurerType, Banner as t_banner, CompetitorPricing as TCompetitorPricing, \
-
 
32
    AmazonPromotionType
32
from shop2020.thriftpy.model.v1.inventory.ttypes import VatType, \
33
from shop2020.thriftpy.model.v1.inventory.ttypes import VatType, \
33
    InventoryServiceException, IgnoredInventoryUpdateItems, SnapdealInventoryItem
34
    InventoryServiceException, IgnoredInventoryUpdateItems,SnapdealInventoryItem
34
from shop2020.thriftpy.model.v1.order.ttypes import OrderSource
35
from shop2020.thriftpy.model.v1.order.ttypes import OrderSource
35
from shop2020.utils import EmailAttachmentSender
36
from shop2020.utils import EmailAttachmentSender
36
from shop2020.utils.EmailAttachmentSender import mail
37
from shop2020.utils.EmailAttachmentSender import mail
37
from shop2020.utils.Utils import to_py_date, log_risky_flag
38
from shop2020.utils.Utils import to_py_date, log_risky_flag
38
from sqlalchemy import desc, asc
39
from sqlalchemy import desc, asc
39
from sqlalchemy.sql.expression import or_, distinct, func, and_
40
from sqlalchemy.sql.expression import or_, distinct, func, and_ 
40
from sqlalchemy.sql.functions import now
41
from sqlalchemy.sql.functions import now
41
from string import Template
42
from string import Template
42
import datetime
43
import datetime
43
import math
44
import math
44
import sys
45
import sys
Line 1828... Line 1829...
1828
def get_amazon_item_details(amazonItemId):
1829
def get_amazon_item_details(amazonItemId):
1829
    amazonlisted = Amazonlisted.get_by(itemId=amazonItemId)
1830
    amazonlisted = Amazonlisted.get_by(itemId=amazonItemId)
1830
    fbaPromo, fbbPromo = __get_amazon_promotion_attributes_for_item(amazonItemId)
1831
    fbaPromo, fbbPromo = __get_amazon_promotion_attributes_for_item(amazonItemId)
1831
    return amazonlisted, fbaPromo, fbbPromo
1832
    return amazonlisted, fbaPromo, fbbPromo
1832
 
1833
 
-
 
1834
 
1833
def update_amazon_item_details(amazonlisted):
1835
def update_amazon_item_details(amazonlisted):
1834
    amazon_listed = Amazonlisted.get_by(itemId = amazonlisted.itemid)
1836
    amazon_listed = Amazonlisted.get_by(itemId = amazonlisted.itemid)
1835
    amazon_listed.isFba=amazonlisted.isFba
1837
    amazon_listed.isFba=amazonlisted.isFba
1836
    amazon_listed.isFbb=amazonlisted.isFbb
1838
    amazon_listed.isFbb=amazonlisted.isFbb
1837
    amazon_listed.isNonFba=amazonlisted.isNonFba
1839
    amazon_listed.isNonFba=amazonlisted.isNonFba
Line 1857... Line 1859...
1857
    amazon_listed.autoDecrement = amazonlisted.autoDecrement
1859
    amazon_listed.autoDecrement = amazonlisted.autoDecrement
1858
    amazon_listed.autoIncrement = amazonlisted.autoIncrement
1860
    amazon_listed.autoIncrement = amazonlisted.autoIncrement
1859
    amazon_listed.autoFavourite = amazonlisted.autoFavourite
1861
    amazon_listed.autoFavourite = amazonlisted.autoFavourite
1860
    amazon_listed.manualFavourite = amazonlisted.manualFavourite
1862
    amazon_listed.manualFavourite = amazonlisted.manualFavourite
1861
    amazon_listed.otherCost = amazonlisted.otherCost
1863
    amazon_listed.otherCost = amazonlisted.otherCost
-
 
1864
    if amazon_listed.fbaPromoPrice != amazonlisted.fbaPromoPrice and amazonlisted.fbaPromoPrice > 0:
-
 
1865
        amazon_listed.fbaPromoPrice = amazonlisted.fbaPromoPrice
-
 
1866
        amazon_listed.fbaPriceLastUpdatedOn = datetime.datetime.now()
-
 
1867
    if amazon_listed.fbbPromoPrice != amazonlisted.fbbPromoPrice and amazonlisted.fbbPromoPrice > 0:
-
 
1868
        amazon_listed.fbbPromoPrice = amazonlisted.fbbPromoPrice
-
 
1869
        amazon_listed.fbbPriceLastUpdatedOn = datetime.datetime.now()
1862
    session.commit()
1870
    session.commit()
1863
   
1871
   
1864
def add_amazon_item(amazonlisted):
1872
def add_amazon_item(amazonlisted):
1865
    if (not amazonlisted) or (not amazonlisted.itemid) or (not amazonlisted.asin):
1873
    if (not amazonlisted) or (not amazonlisted.itemid) or (not amazonlisted.asin):
1866
        return
1874
        return
Line 2704... Line 2712...
2704
 
2712
 
2705
def get_all_fbb_listed_items():
2713
def get_all_fbb_listed_items():
2706
    return Amazonlisted.query.filter(Amazonlisted.isFbb==True).filter(Amazonlisted.fbbListedOn==None).all()
2714
    return Amazonlisted.query.filter(Amazonlisted.isFbb==True).filter(Amazonlisted.fbbListedOn==None).all()
2707
 
2715
 
2708
def get_all_fbb_pricing_items():
2716
def get_all_fbb_pricing_items():
2709
    return Amazonlisted.query.filter(Amazonlisted.isFbb==True).filter(Amazonlisted.suppressFbbPriceUpdate==False).filter(Amazonlisted.fbbPriceLastUpdatedOn > Amazonlisted.fbbPriceLastUpdatedOnSc).filter(Amazonlisted.fbbListedOn != None).all()
2717
    return Amazonlisted.query.filter(Amazonlisted.isFbb==True).filter(Amazonlisted.suppressFbbPriceUpdate==False).filter(Amazonlisted.fbbListedOn != None).all()
2710
 
-
 
2711
 
2718
 
2712
def get_count_for_marketplaceHistory(source,itemId):
2719
def get_count_for_marketplaceHistory(source,itemId):
2713
    return len(session.query(MarketPlaceHistory).filter(MarketPlaceHistory.item_id==itemId).filter(MarketPlaceHistory.source==source).filter(or_(MarketPlaceHistory.toGroup==True,MarketPlaceHistory.toGroup==None)).all())   
2720
    return len(session.query(MarketPlaceHistory).filter(MarketPlaceHistory.item_id==itemId).filter(MarketPlaceHistory.source==source).filter(or_(MarketPlaceHistory.toGroup==True,MarketPlaceHistory.toGroup==None)).all())   
2714
 
2721
 
2715
def get_marketplace_history_by_date(source,startDate,endDate,offset,limit,itemId):
2722
def get_marketplace_history_by_date(source,startDate,endDate,offset,limit,itemId):
Line 2829... Line 2836...
2829
    return session.query(CompetitorPricing,Item).join((Item,CompetitorPricing.item_id==Item.id)).filter(CompetitorPricing.competitorPricing_requestId==uploadId).all()
2836
    return session.query(CompetitorPricing,Item).join((Item,CompetitorPricing.item_id==Item.id)).filter(CompetitorPricing.competitorPricing_requestId==uploadId).all()
2830
 
2837
 
2831
def add_amazon_promotion(amazonPromotions):
2838
def add_amazon_promotion(amazonPromotions):
2832
    for sku, amazonPromotion in amazonPromotions.iteritems():
2839
    for sku, amazonPromotion in amazonPromotions.iteritems():
2833
        d_amazonPromotion = AmazonPromotion()
2840
        d_amazonPromotion = AmazonPromotion()
2834
        d_amazonPromotion.sku = sku
2841
        d_amazonPromotion.sku = sku.strip().upper()
2835
        d_amazonPromotion.standardPrice = amazonPromotion.standardPrice
2842
        d_amazonPromotion.standardPrice = amazonPromotion.standardPrice
2836
        d_amazonPromotion.salePrice = amazonPromotion.salePrice
2843
        d_amazonPromotion.salePrice = amazonPromotion.salePrice
2837
        d_amazonPromotion.subsidy = amazonPromotion.subsidyAmount
2844
        d_amazonPromotion.subsidy = amazonPromotion.subsidyAmount
2838
        d_amazonPromotion.startDate = to_py_date(amazonPromotion.startDate)
2845
        d_amazonPromotion.startDate = to_py_date(amazonPromotion.startDate)
2839
        d_amazonPromotion.endDate = to_py_date(amazonPromotion.endDate)
2846
        d_amazonPromotion.endDate = to_py_date(amazonPromotion.endDate)
2840
        d_amazonPromotion.addedOn = datetime.datetime.now()
2847
        d_amazonPromotion.addedOn = to_py_date(amazonPromotion.addedOn)
2841
        d_amazonPromotion.promotionActive = amazonPromotion.promotionActive
2848
        d_amazonPromotion.promotionActive = False
2842
        if sku.upper().startswith('FBA'):
2849
        if d_amazonPromotion.sku.startswith('FBA'):
2843
            d_amazonPromotion.stateId = 1
2850
            d_amazonPromotion.stateId = 1
2844
        elif sku.upper().startswith('FBB'):
2851
        elif d_amazonPromotion.sku.startswith('FBB'):
2845
            d_amazonPromotion.stateId = 2
2852
            d_amazonPromotion.stateId = 2
2846
        else:
2853
        else:
2847
            raise CatalogServiceException(101, "Amazon Promotion Illegal sku id")
2854
            raise CatalogServiceException(101, "Amazon Promotion Illegal sku id "+sku)
2848
        d_amazonPromotion.promotionType = amazonPromotion.promotionType
2855
        d_amazonPromotion.promotionType = amazonPromotion.promotionType
-
 
2856
        if d_amazonPromotion.promotionType == AmazonPromotionType._NAMES_TO_VALUES.get('LONGTERM'):
-
 
2857
            amazonItem = get_amazon_item_details(int(d_amazonPromotion.sku[3:]))
-
 
2858
            if amazonItem[0] is None:
-
 
2859
                raise CatalogServiceException(102, "Item doesnot exist in amazonlisted sku id "+sku)
-
 
2860
            if d_amazonPromotion.stateId == 1:
-
 
2861
                amazonItem[0].fbaPromoPrice =  amazonPromotion.salePrice
-
 
2862
                amazonItem[0].fbaPromoStartDate = to_py_date(amazonPromotion.startDate)
-
 
2863
                amazonItem[0].fbaPromoEndDate =  to_py_date(amazonPromotion.endDate)
-
 
2864
                amazonItem[0].fbaPromoActive = False
-
 
2865
            else:
-
 
2866
                amazonItem[0].fbbPromoPrice =  amazonPromotion.salePrice
-
 
2867
                amazonItem[0].fbbPromoStartDate = to_py_date(amazonPromotion.startDate)
-
 
2868
                amazonItem[0].fbbPromoEndDate =  to_py_date(amazonPromotion.endDate)
-
 
2869
                amazonItem[0].fbbPromoActive = False
-
 
2870
        else:
-
 
2871
            d_amazonPromotion.promotionActive = True
2849
    session.commit()
2872
    session.commit()
2850
    return True
2873
    return True
2851
 
2874
 
2852
 
2875
 
2853
def get_vat_rates(itemId, categoryId):
2876
def get_vat_rates(itemId, categoryId):
Line 2885... Line 2908...
2885
    return AmazonPromotion.query.filter(AmazonPromotion.startDate>=(to_py_date(startDate))).filter(AmazonPromotion.endDate<=(to_py_date(endDate))).all()
2908
    return AmazonPromotion.query.filter(AmazonPromotion.startDate>=(to_py_date(startDate))).filter(AmazonPromotion.endDate<=(to_py_date(endDate))).all()
2886
        
2909
        
2887
def update_amazon_promotion(amazonPromotions):
2910
def update_amazon_promotion(amazonPromotions):
2888
    for amazonPromotion in amazonPromotions:
2911
    for amazonPromotion in amazonPromotions:
2889
        amp = AmazonPromotion.get_by(sku=amazonPromotion.sku,addedOn=amazonPromotion.addedOn, promotionType = amazonPromotion.promotionType )
2912
        amp = AmazonPromotion.get_by(sku=amazonPromotion.sku,addedOn=amazonPromotion.addedOn, promotionType = amazonPromotion.promotionType )
-
 
2913
        amp.promotionActive = True
2890
        amp.updatedOnMarketplace = amazonPromotion.updatedOnMarketplace
2914
        amp.updatedOnMarketplace = datetime.datetime.now()
-
 
2915
        if amp.promotionType==1:
-
 
2916
            amazonItem = get_amazon_item_details(int(amp.sku[3:]))
-
 
2917
            if amp.stateId == 1:
-
 
2918
                amazonItem[0].fbaPromoActive = True
-
 
2919
            else:
-
 
2920
                amazonItem[0].fbbPromoActive = True
2891
    session.commit()
2921
    session.commit()
2892
 
2922
 
2893
def __get_amazon_promotion_attributes_for_item(item_id):
2923
def __get_amazon_promotion_attributes_for_item(item_id):
2894
    timestamp = datetime.datetime.now()
2924
    timestamp = datetime.datetime.now()
2895
    fbaPromo = AmazonPromotion.query.filter(AmazonPromotion.sku=='FBA'+str(item_id)).filter(AmazonPromotion.startDate<=timestamp).filter(AmazonPromotion.endDate>=timestamp).filter(AmazonPromotion.updatedOnMarketplace>to_py_date(0)).order_by(desc(AmazonPromotion.updatedOnMarketplace)).limit(1).all()
-
 
2896
    fbbPromo = AmazonPromotion.query.filter(AmazonPromotion.sku=='FBB'+str(item_id)).filter(AmazonPromotion.startDate<=timestamp).filter(AmazonPromotion.endDate>=timestamp).filter(AmazonPromotion.updatedOnMarketplace>to_py_date(0)).order_by(desc(AmazonPromotion.updatedOnMarketplace)).limit(1).all()
-
 
2897
    return fbaPromo, fbbPromo
-
 
2898
 
-
 
2899
def get_ex_affiliate_item_info():
-
 
2900
        query = session.query(ExclusiveAffiliateItemInfo, OutboundAffiliateMaster.name).join((OutboundAffiliateMaster, ExclusiveAffiliateItemInfo.affiliateId==OutboundAffiliateMaster.id)).filter(ExclusiveAffiliateItemInfo.isActive == True).all()
-
 
2901
        close_session()
-
 
2902
        map = {}
-
 
2903
        for q in query:
-
 
2904
            map[q[0].itemId]=to_t_exclusive_affiliate_item_info(q) 
-
 
2905
        return map
-
 
2906
2925
    fbaPromo = AmazonPromotion.query.filter(AmazonPromotion.sku=='FBA'+str(item_id)).filter(AmazonPromotion.promotionType==AmazonPromotionType.LONGTERM).filter(AmazonPromotion.startDate<=timestamp).filter(AmazonPromotion.endDate>=timestamp).order_by(desc(AmazonPromotion.addedOn)).limit(1).all()
-
 
2926
    fbbPromo = AmazonPromotion.query.filter(AmazonPromotion.sku=='FBB'+str(item_id)).filter(AmazonPromotion.promotionType==AmazonPromotionType.LONGTERM).filter(AmazonPromotion.startDate<=timestamp).filter(AmazonPromotion.endDate>=timestamp).order_by(desc(AmazonPromotion.addedOn)).limit(1).all()
-
 
2927
    return fbaPromo, fbbPromo
-
 
2928
2907
2929