Functions

Database Adapter

Μέσω των functions υπάρχει η δυνατότητα ανάκτησης και επεξεργασίας των δεδομένων του eshop μέσω του object Database. Για παράδειγμα, το παρακάτω script εξάγει τα προϊόντα σε CSV 

sep = ';' 
productUrl = 'http://' + Store.Domain + '/products/' 

for product in Database.Products.All:
    for variant in product.Variants:
        line = []                                           
        line.append(str(variant.ID) + sep)                        #ID
        line.append(product.Title + sep)                          #ΠΕΡΙΓΡΑΦΗ 1 
        line.append(variant.Title + sep)                          #ΠΕΡΙΓΡΑΦΗ 2 
        line.append(product.Vat + sep)                            #ΦΠΑ
        line.append(str(variant.Price) + sep)                     #ΤΙΜΗ1
        line.append(str(product.CompareAtPrice) + sep)            #TIMH2
        line.append(str(variant.Available) + sep)                 #ΔΙΑΘΕΣΙΜΟΤΗΤΑ 
        line.append(Helpers.ImgUrl(variant.Image, "thumb") + sep) #image
        line.append(productUrl + product.Handle +  + sep)         #URL
        print ''.join(line) 
        
Response.ContentType = "text/csv";

Database objects

Database Products All

Array με όλα τα προϊόντα του eshop

Database.Products.All

Εύρεση συγκεκριμένου προϊόντος

Database.Products.Find(ProductID)

Products Database Query

Database.Products.Where(lambda e: e.IsPublished and e.Vendor.Contains('Nike'))

Ακολουθεί παράδειγμα εύρεσης προϊόντων που έχουν επεξεργαστεί μετά από συγκεκριμένη ημερομηνία. Η ημερομηνία έχει περαστεί στο query string του URL του function

Εκτελείτε το function με HTTP Get

GET http://www.mystore.gr/functions/export?date=2018-05-01T07

Μέσα στο script μετατρέπετε η ημερομηνία σε DateTime object με τον εξής τρόπο

lastModified = DateTime.Parse(Request.QueryString['date'])
for product in Database.Products.Where(lamda e: e.DateModified > lastModified)
   ....

Συνοπτικά, οι παράμετροι του query string μπορούν να διαβαστούν μέσω του αντικειμένου Request.QueryString[...] ενώ σε περίπτωση HTTP Post από Request.Form['..']

Η ημερομηνία είναι τύπου DateTime απο .Net Framework

Εύρεση συγκεκριμένου προϊόντος μέσω query

Το παρακάτω παράδειγμα επιστέφει ένα και μόνο προϊόν που η τιμή του είναι 32.99. Εαν βρεθούν περισσότερα ή κανένα τότε επιστρέφεται null.

Database.Products.SingleOrNull(lambda e: e.Price == 32.99)

Εύρεση ανά παραλλαγή

Database.Products.FindByVariant(VariantID)

Παραγγελίες

Παράδειγμα εξαγωγής παραγγελιών τελευταίων 5 ημερών

#Όλες οι ημερομηνίεςείναι UTC, θα πρέπει να μετατραπούν σε GTB (Ελλάδα)
zoneInfo = TimeZoneInfo.FindSystemTimeZoneById('GTB Standard Time')

def DateTimeConvert(toConvert):
    toConvert = TimeZoneInfo.ConvertTimeFromUtc(toConvert, zoneInfo) 
    return toConvert.ToString('yyyy-MM-dd H:mm:ss')

sep = ';' 
for order in Database.Orders.FromDate(DateTime.Now.AddDays(-5)):
    if order.Cancelled: continue #Ακυρωμένη
    list = [] 
    list.append(str(order.AA) + sep)                                            
    list.append(order.Customer.email.lower() + sep)                             
    list.append(str(order.ShippingCost) + sep);                                 
    list.append(str(0 if order.CodPrice is None else order.CodePrice) + sep);   
    list.append(order.Discount + sep)                                                 
    list.append(DateTimeConvert(order.CreatedAtUtc) + sep)                      
    list.append(order.Note + sep)                                           
    print ''.join(list)

Παραγγελίες μετά από x ημερομηνία

Database.Orders.FromDate(DateTime object)

Παραγγελίες από x μεχρί y ημερομηνία

Η μέγιστη περίοδος παραγγελιών που μπορούν να εξαχθούν ανα request είναι 1 χρόνος. Για εξαγωγή όλων των παραγγελιών θα πρέπει να χρησιμοποιηθεί pagination ανά ημερομηνία με διαφοράς έτους.

#toDate default = None
Database.Orders.FromDateRange(DateTime fromDate, DateTime toDate)

Εύρεση συγκεκριμένης παραγγελίας

Database.Orders.Find(order.AA)

Ακύρωση παραγγελίας

order = Database.Orders.Find(AA)
Database.Orders.Cancel(order)

Εκτέλεση παραγγελίας

Κατά την εκτέλεση υπάρχει η δυνατότητα αποστολής email στον πελάτη

POST http://www.mystore.gr/functions/fulfill

Πλήρες Script

orderid = Request.Form['id'] 
sendmail = Request.Form['sendmail'] == 'true' 

order = Database.Orders.Find(orderid)
Database.Orders.Fulfill(order, sendMail)
print "Ok"

Database Update

Προς το παρών είναι δυνατή μόνο η ανανέωση πεδίων προϊόντων. Μέσω HTTP Post αποστέλλονται τα πεδία προς ανανέωση

price = Request.Form['product_price']
variantid = Request.Form['variantid']
stock = request.Form['stock'] 

product = Database.Products.Variants.Find(int(variantid)) 
if(product is None):
    print "Product not found"
    Response.StatusCode = 404; 
else:
    updateRequest = Database.RequestUpdate(product.SelectedVariant)
    updateRequest.Set('Price', price)
    updateRequest.Set('Stock', stock) 
    Database.CommitUpdate(updateRequest)
    print "Ok"