Commit 3c7cba87 authored by Ulises Morales Ramírez's avatar Ulises Morales Ramírez

Merge branch 'ipn_paypal' into 'dev'

IPN

See merge request !8
parents da21ffcc 1304ce86
...@@ -14,7 +14,7 @@ import os ...@@ -14,7 +14,7 @@ import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
BASE_URL = "localhost:8000"
# Quick-start development settings - unsuitable for production # Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ # See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/
......
...@@ -201,10 +201,10 @@ ...@@ -201,10 +201,10 @@
</tbody> </tbody>
<tfoot> <tfoot>
<tr> <tr>
<td> <!--td>
<a href="../pay" class="btn btn-primary pull-right">Pay</a> <a href="../pay" class="btn btn-primary pull-right">Pay</a>
</td> </td-->
<td> <td class="text-center">
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post"> <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_cart"> <input type="hidden" name="cmd" value="_cart">
<input type="hidden" name="upload" value="1"> <input type="hidden" name="upload" value="1">
...@@ -222,9 +222,10 @@ ...@@ -222,9 +222,10 @@
{% endfor %} {% endfor %}
<input type='hidden' name='cancel_return' <input type='hidden' name='cancel_return'
value='http://www.example.com/cancel.php'> value='{{BASE_URL}}/reports'>
<input type='hidden' name='return' <input type='hidden' name='return'
value='http://www.example.com/success.php'> value='{{BASE_URL}}/catalog/cart'>
<input type="hidden" name="notify_url" value="{{BASE_URL}}/catalog/ipn">
<input type="image" <input type="image"
src="https://www.sandbox.paypal.com/es_XC/MX/i/btn/btn_buynowCC_LG.gif" src="https://www.sandbox.paypal.com/es_XC/MX/i/btn/btn_buynowCC_LG.gif"
border="0" name="submit" border="0" name="submit"
......
...@@ -15,4 +15,5 @@ urlpatterns = [ ...@@ -15,4 +15,5 @@ urlpatterns = [
url(r'^purchcartrqst/$', views.purchaseProduct, name='purch-prod-rqst'), url(r'^purchcartrqst/$', views.purchaseProduct, name='purch-prod-rqst'),
url(r'^cart/$', views.showCart, name='show-cart'), url(r'^cart/$', views.showCart, name='show-cart'),
url(r'^pay/$', views.Pay, name='pay'), url(r'^pay/$', views.Pay, name='pay'),
url(r'^ipn/$', views.IPN, name='ipn'),
] ]
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import unicode_literals from __future__ import unicode_literals
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from GeoInt_SIDT.settings import BASE_URL
from catalog.forms import ASFSearchForm from catalog.forms import ASFSearchForm
from catalog.models import Polygon, CartProduct, Product_l1c, Search, Purchase, Process from catalog.models import Polygon, CartProduct, Product_l1c, Search, Purchase, Process
from django.http import HttpResponse, JsonResponse, HttpResponseRedirect from django.http import HttpResponse, JsonResponse, HttpResponseRedirect
...@@ -8,28 +10,24 @@ from django.urls import reverse ...@@ -8,28 +10,24 @@ from django.urls import reverse
from django.views.generic.base import View from django.views.generic.base import View
from django.template import loader, RequestContext from django.template import loader, RequestContext
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core import management
#from urllib import urlencode
#from collections import OrderedDict
import requests, json, unicodedata, sys, base64 import requests, json, unicodedata, sys, base64
import os import os
import sys
from geosentinel import APISentinel, polygonToBox from geosentinel import APISentinel, polygonToBox
import cgi
########### lee archivo de configuración ################ import collections
import urllib
from urllib import parse ########### lee archivo de configuración ################
dirname = os.path.dirname(__file__) dirname = os.path.dirname(__file__)
configfile = os.path.join(dirname, '../config/config.json') configfile = os.path.join(dirname, '../config/config.json')
with open(configfile, 'r') as f: with open(configfile, 'r') as f:
config = json.load(f) config = json.load(f)
print(config['PATHS']['PATH_GEOSENTINEL']) print(config['PATHS']['PATH_GEOSENTINEL'])
print(config['PATHS']['PATH_NAS']) print(config['PATHS']['PATH_NAS'])
print(config['API_SENTINEL']['SENTINEL_USER']) print(config['API_SENTINEL']['SENTINEL_USER'])
print(config['API_SENTINEL']['SENTINEL_PASS']) print(config['API_SENTINEL']['SENTINEL_PASS'])
NAS_PATH = config['PATHS']['PATH_NAS'] NAS_PATH = config['PATHS']['PATH_NAS']
USERS_PATH = config['PATHS']['PATH_USERS'] USERS_PATH = config['PATHS']['PATH_USERS']
SENTINEL_PATH = config['PATHS']['PATH_GEOSENTINEL'] SENTINEL_PATH = config['PATHS']['PATH_GEOSENTINEL']
...@@ -42,21 +40,23 @@ sentinel = APISentinel.APISentinel(API_SENTINEL_USER, API_SENTINEL_PASS) ...@@ -42,21 +40,23 @@ sentinel = APISentinel.APISentinel(API_SENTINEL_USER, API_SENTINEL_PASS)
# Create your views here. # Create your views here.
#------------------------------------------------------------------------------- # -------------------------------------------------------------------------------
def SCLJSON2(): def SCLJSON2():
return
return
#------------------------------------------------------------------------------- # -------------------------------------------------------------------------------
#------------------------------------------------------------------------------- # -------------------------------------------------------------------------------
def login(request): def login(request):
""" """
View function for home page of site. View function for home page of site.
""" """
# Render the HTML template index.html with the data in the context variable # Render the HTML template index.html with the data in the context variable
return render(request,'login.html',{}) return render(request, 'login.html', {})
#------------------------------------------------------------------------------- # -------------------------------------------------------------------------------
def map(request): def map(request):
""" """
View function for home page of site. View function for home page of site.
...@@ -64,18 +64,20 @@ def map(request): ...@@ -64,18 +64,20 @@ def map(request):
form = ASFSearchForm(request.POST) form = ASFSearchForm(request.POST)
showcart = True showcart = True
# Render the HTML template index.html with the data in the context variable # Render the HTML template index.html with the data in the context variable
return render(request, 'map.html', { "searchForm": form,"showcart": showcart }) return render(request, 'map.html', {"searchForm": form, "showcart": showcart})
#------------------------------------------------------------------------------- # -------------------------------------------------------------------------------
def requestToImage(request): def requestToImage(request):
img_link = request.GET['value'] img_link = request.GET['value']
r = requests.get(img_link, auth=("emmhp", "geoemm29"), stream=True) r = requests.get(img_link, auth=("emmhp", "geoemm29"), stream=True)
img_str = base64.b64encode(r.content) img_str = base64.b64encode(r.content)
img_str = img_str.decode('utf-8') img_str = img_str.decode('utf-8')
return JsonResponse({'img': img_str}) return JsonResponse({'img': img_str})
#-------------------------------------------------------------------------------
# -------------------------------------------------------------------------------
def productList(request): def productList(request):
""" """
View function for home page of site. View function for home page of site.
...@@ -83,18 +85,17 @@ def productList(request): ...@@ -83,18 +85,17 @@ def productList(request):
req = dict(request.POST) req = dict(request.POST)
req.pop('csrfmiddlewaretoken', None) req.pop('csrfmiddlewaretoken', None)
user = User.objects.get(id=request.user.id) user = User.objects.get(id=request.user.id)
process = req['platform'][0] process = req['platform'][0]
area = req['polygon'][0] area = req['polygon'][0]
init_date = req['start'][0][:10] init_date = req['start'][0][:10]
end_date = req['end'][0][:10] end_date = req['end'][0][:10]
clouds = req['cloudPercentage'][0] clouds = req['cloudPercentage'][0]
cloud_percentage = "[0 TO " + req['cloudPercentage'][0] + "]" cloud_percentage = "[0 TO " + req['cloudPercentage'][0] + "]"
## ----- aqui llamada a api sentinel ## ----- aqui llamada a api sentinel
## ----- antes consultar en DB si no se tiene ya el producto ## ----- antes consultar en DB si no se tiene ya el producto
date = ("".join(init_date.split('-')), "".join(end_date.split('-'))) date = ("".join(init_date.split('-')), "".join(end_date.split('-')))
params = {"platformname": "Sentinel-2"} params = {"platformname": "Sentinel-2"}
# if cloud_percentage.strip(): # if cloud_percentage.strip():
...@@ -106,9 +107,12 @@ def productList(request): ...@@ -106,9 +107,12 @@ def productList(request):
## requesting producto to sentinel api ## requesting producto to sentinel api
##products = sentinel.getProducts(pol_bbox, date, params) ##products = sentinel.getProducts(pol_bbox, date, params)
products = sentinel.getProducts(pol_bbox, date, {"platformname":"Sentinel-2", "cloudcoverpercentage":cloud_percentage}, "Contains") ##intenta obtener los productos que contienen el polígono products = sentinel.getProducts(pol_bbox, date,
if len(products)<=0: {"platformname": "Sentinel-2", "cloudcoverpercentage": cloud_percentage},
products = sentinel.getProducts(pol_bbox, date, {"platformname":"Sentinel-2", "cloudcoverpercentage":cloud_percentage}) ## si no hay que contengan el polígono busca los que lo intersecan "Contains") ##intenta obtener los productos que contienen el polígono
if len(products) <= 0:
products = sentinel.getProducts(pol_bbox, date, {"platformname": "Sentinel-2",
"cloudcoverpercentage": cloud_percentage}) ## si no hay que contengan el polígono busca los que lo intersecan
## path from image preview storage location ## path from image preview storage location
img_preview = '/static/images/sat_preview/sat_test.jpg' img_preview = '/static/images/sat_preview/sat_test.jpg'
...@@ -124,44 +128,43 @@ def productList(request): ...@@ -124,44 +128,43 @@ def productList(request):
products[p]['tileid'] = titleid[5][1:] products[p]['tileid'] = titleid[5][1:]
catalog.append({ catalog.append({
'process' : process, 'process': process,
'start_date' : init_date, 'start_date': init_date,
'end_date' : end_date, 'end_date': end_date,
'cloud_percentage' : cloud_percentage, 'cloud_percentage': cloud_percentage,
'product' : products[p], 'product': products[p],
'uuid' : products[p]['uuid'], 'uuid': products[p]['uuid'],
'img' : img_preview 'img': img_preview
}) })
#Se tiene que pasar a Search el objeto completo correspondiente al process
index = Process.objects.filter(platform_id = process)
proceso = index[0]
# Se tiene que pasar a Search el objeto completo correspondiente al process
index = Process.objects.filter(platform_id=process)
proceso = index[0]
if(len(catalog)!=0): if (len(catalog) != 0):
listSearch = Search( listSearch = Search(
user = user, user=user,
startDate = init_date, startDate=init_date,
endDate = end_date, endDate=end_date,
process = proceso, #Aquí pasar el objeto completo de Process Desbloqueo cambio de Sergio process=proceso, # Aquí pasar el objeto completo de Process Desbloqueo cambio de Sergio
clouds = clouds, clouds=clouds,
area = area area=area
) )
listSearch.save() listSearch.save()
return JsonResponse({'catalog': catalog}); return JsonResponse({'catalog': catalog});
# return HttpResponse(status=204) # return HttpResponse(status=204)
#-------------------------------------------------------------------------------
# -------------------------------------------------------------------------------
class SearchSubmitView(View): class SearchSubmitView(View):
template = 'map.html' template = 'map.html'
def strip_accents(self, s): def strip_accents(self, s):
return ''.join((c for c in unicodedata.normalize('NFD', s) if unicodedata.category(c) != 'Mn')) return ''.join((c for c in unicodedata.normalize('NFD', s) if unicodedata.category(c) != 'Mn'))
def post(self, request): def post(self, request):
template = loader.get_template(self.template) template = loader.get_template(self.template)
searchValue = request.POST.get('value', '') searchValue = request.POST.get('value', '')
searchValue = self.strip_accents(searchValue).lower() searchValue = self.strip_accents(searchValue).lower()
...@@ -176,86 +179,92 @@ class SearchSubmitView(View): ...@@ -176,86 +179,92 @@ class SearchSubmitView(View):
polygonInfo = json.loads(polygon.json_info) polygonInfo = json.loads(polygon.json_info)
data_list.append({ data_list.append({
'id' : str(polygon.id), 'id': str(polygon.id),
'city' : polygonInfo['properties']['NOMGEO'], 'city': polygonInfo['properties']['NOMGEO'],
'state' : polygonInfo['properties']['ENT_NAME'], 'state': polygonInfo['properties']['ENT_NAME'],
'geojson' : polygonInfo, 'geojson': polygonInfo,
'wkt_polygon' : polygon.wkt_polygon, 'wkt_polygon': polygon.wkt_polygon,
'description' : polygon.description, 'description': polygon.description,
'source' : polygon.source 'source': polygon.source
}) })
data = { data = {
'polygonList' : data_list 'polygonList': data_list
} }
return JsonResponse(data) return JsonResponse(data)
#-------------------------------------------------------------------------------
# -------------------------------------------------------------------------------
def regionSearched(request): def regionSearched(request):
""" """
View function for searching regions in DB View function for searching regions in DB
""" """
city_name = request.POST['value'] city_name = request.POST['value']
cityList = Polygon.objects.filter(name=city_name).exclude(E_MUN__isnull=True) cityList = Polygon.objects.filter(name=city_name).exclude(E_MUN__isnull=True)
if len(cityList) > 0: if len(cityList) > 0:
print(cityList) print(cityList)
return HttpResponseRedirect(reverse('map')) return HttpResponseRedirect(reverse('map'))
#-------------------------------------------------------------------------------
# -------------------------------------------------------------------------------
def saveInCart(request): def saveInCart(request):
""" """
Saves product in cart table in DB Saves product in cart table in DB
""" """
user = User.objects.get(id=request.user.id) user = User.objects.get(id=request.user.id)
product_list = json.loads(request.POST['cart_product_list']) product_list = json.loads(request.POST['cart_product_list'])
search = Search.objects.filter(user=user).last() search = Search.objects.filter(user=user).last()
if(len(product_list)!=0): if (len(product_list) != 0):
cartProd = Purchase( cartProd = Purchase(
user = user, user=user,
search = search, search=search,
productList = json.dumps(product_list, indent=3, sort_keys=True, ensure_ascii=True), productList=json.dumps(product_list, indent=3, sort_keys=True, ensure_ascii=True),
purchased = False, purchased=False,
price = 5.0 price=5.0
) )
cartProd.save() cartProd.save()
return HttpResponse(status=204) return HttpResponse(status=204)
#-------------------------------------------------------------------------------
# -------------------------------------------------------------------------------
def getFromCart(request): def getFromCart(request):
""" """
Temporarily gets product from cart table based on uuid porperty to show in cart section Temporarily gets product from cart table based on uuid porperty to show in cart section
""" """
user = User.objects.get(id=request.user.id) user = User.objects.get(id=request.user.id)
prod_list = [] prod_list = []
product_list = Purchase.objects.values('user', 'productList', 'purchased', 'price', 'aggreg_date','id').filter(user=user, purchased=0) product_list = Purchase.objects.values('user', 'productList', 'purchased', 'price', 'aggreg_date', 'id').filter(
user=user, purchased=0)
for products in product_list: for products in product_list:
product = json.loads(products['productList']) product = json.loads(products['productList'])
prod_list.append({ prod_list.append({
'purchased': products['purchased'], 'purchased': products['purchased'],
'price' : products['price'], 'price': products['price'],
'aggreg_date' : products['aggreg_date'], 'aggreg_date': products['aggreg_date'],
'id': products['id'], 'id': products['id'],
'catalog': product 'catalog': product
}) })
return JsonResponse({'product_list': prod_list}) return JsonResponse({'product_list': prod_list})
#-------------------------------------------------------------------------------
# -------------------------------------------------------------------------------
def delFromCart(request): def delFromCart(request):
user = User.objects.get(id=request.user.id) user = User.objects.get(id=request.user.id)
product_list = Purchase.objects.filter(user=user, id=request.POST['id']).delete() product_list = Purchase.objects.filter(user=user, id=request.POST['id']).delete()
return HttpResponse(status=204) return HttpResponse(status=204)
##------------------------------------------------------------------------------- ##-------------------------------------------------------------------------------
#def L2ASCL_data(request): # def L2ASCL_data(request):
# with open("/home/mario/NAS_MarioCh/mario_repsat_test/T15QZD_sclData.json") as f: # with open("/home/mario/NAS_MarioCh/mario_repsat_test/T15QZD_sclData.json") as f:
# json_data = OrderedDict(json.load(f)) # json_data = OrderedDict(json.load(f))
# graphData = dict() # graphData = dict()
...@@ -287,89 +296,91 @@ def delFromCart(request): ...@@ -287,89 +296,91 @@ def delFromCart(request):
## graphData['options']['maintainAspectRatio']=False ## graphData['options']['maintainAspectRatio']=False
# print( json.dumps(graphData).encode("utf-8")) # print( json.dumps(graphData).encode("utf-8"))
# return render(request, 'L2ASCL_data.html', {"graphData":json.dumps(graphData).encode("utf-8")}) # return render(request, 'L2ASCL_data.html', {"graphData":json.dumps(graphData).encode("utf-8")})
#------------------------------------------------------------------------------- # -------------------------------------------------------------------------------
def wsReportImages(request): def wsReportImages(request):
print(request.GET) print(request.GET)
#-------------------------------------------------------------------------------
# -------------------------------------------------------------------------------
def purchaseProduct(request): def purchaseProduct(request):
""" """
For now to purchase a product consists in verifying whether L1C products in cart already exist in DB. For now to purchase a product consists in verifying whether L1C products in cart already exist in DB.
""" """
# ------------- crear archivo findProducts.json # ------------- crear archivo findProducts.json
print("Comprar productos!!!!") print("Comprar productos!!!!")
user = User.objects.get(id=request.user.id) user = User.objects.get(id=request.user.id)
prod_list = [] prod_list = []
product_list = Search.objects.values('user', 'area', 'startDate', 'endDate','clouds').filter(user=user, purchased=0) product_list = Search.objects.values('user', 'area', 'startDate', 'endDate', 'clouds').filter(user=user,
purchased=0)
data = {} data = {}
for products in product_list: for products in product_list:
print(products) print(products)
#~ product = json.loads(products['productList']) # ~ product = json.loads(products['productList'])
#~ prod_list.append({ # ~ prod_list.append({
#~ 'purchased': products['purchased'], # ~ 'purchased': products['purchased'],
#~ 'price' : products['price'], # ~ 'price' : products['price'],
#~ 'aggreg_date' : products['aggreg_date'], # ~ 'aggreg_date' : products['aggreg_date'],
#~ 'catalog': product # ~ 'catalog': product
#~ }) # ~ })
#~ return JsonResponse({'product_list': prod_list}) # ~ return JsonResponse({'product_list': prod_list})
#~ print("Comprar productos!!!!") # ~ print("Comprar productos!!!!")
#~ print(request) # ~ print(request)
#~ print("start date:") # ~ print("start date:")
#~ print(request.POST['wkt']) # ~ print(request.POST['wkt'])
#~ print(request.POST['startDate']) # ~ print(request.POST['startDate'])
#~ print(request.POST['endDate']) # ~ print(request.POST['endDate'])
#~ print(request.POST['clouds']) # ~ print(request.POST['clouds'])
#~ print(request.POST['usuario']) # ~ print(request.POST['usuario'])
#~ username = request.POST['usuario'] # ~ username = request.POST['usuario']
#~ fecha_inicio = request.POST['startDate'] # ~ fecha_inicio = request.POST['startDate']
#~ fecha_fin = request.POST['endDate'] # ~ fecha_fin = request.POST['endDate']
#~ print(fecha_inicio.replace("-", "")) # ~ print(fecha_inicio.replace("-", ""))
#~ print(fecha_fin.replace("-", "")) # ~ print(fecha_fin.replace("-", ""))
#~ userdir = NAS_PATH + "repsat_test_dev/"+username ##crea el directorio del usuario # ~ userdir = NAS_PATH + "repsat_test_dev/"+username ##crea el directorio del usuario
#~ if not os.path.exists(userdir): # ~ if not os.path.exists(userdir):
#~ os.makedirs(userdir) # ~ os.makedirs(userdir)
#~ products_dir = NAS_PATH + "sentinelImages/L2A/" # ~ products_dir = NAS_PATH + "sentinelImages/L2A/"
#~ linksDir = userdir+"/L2A/" # ~ linksDir = userdir+"/L2A/"
#~ #obtiene los datos para el json # ~ #obtiene los datos para el json
#~ data = {} # ~ data = {}
#~ data['wkt'] = request.POST['wkt'] # ~ data['wkt'] = request.POST['wkt']
#~ data['platform'] = 'Sentinel-2' # ~ data['platform'] = 'Sentinel-2'
#~ data['productLevel'] = 'L2A' # ~ data['productLevel'] = 'L2A'
#~ data['startDate'] = fecha_inicio.replace("-", "") #quita los guiones de la fecha # ~ data['startDate'] = fecha_inicio.replace("-", "") #quita los guiones de la fecha
#~ data['endDate'] = fecha_fin.replace("-", "") #quita los guiones de la fecha # ~ data['endDate'] = fecha_fin.replace("-", "") #quita los guiones de la fecha
#~ # data['startDate'] = request.POST['startDate'] # ~ # data['startDate'] = request.POST['startDate']
#~ # data['endDate'] = request.POST['endDate'] # ~ # data['endDate'] = request.POST['endDate']
#~ data['clouds'] = request.POST['clouds'] # ~ data['clouds'] = request.POST['clouds']
#~ # data['productsDir'] = '/home/david/NAS/sentinelImages/L2A/' # ~ # data['productsDir'] = '/home/david/NAS/sentinelImages/L2A/'
#~ # data['linksDir'] = '/home/david/centroGEO/repsat/tests/L2A/' # ~ # data['linksDir'] = '/home/david/centroGEO/repsat/tests/L2A/'
#~ data['productsDir'] = products_dir # ~ data['productsDir'] = products_dir
#~ data['linksDir'] = linksDir # ~ data['linksDir'] = linksDir
#~ data['username'] = 'mario-chirinos' # ~ data['username'] = 'mario-chirinos'
#~ data['password'] = 'r4nc0r4u' # ~ data['password'] = 'r4nc0r4u'
#~ #json_data = json.dumps(data, indent=4,sort_keys=True) # ~ #json_data = json.dumps(data, indent=4,sort_keys=True)
#~ #formatea el json # ~ #formatea el json
#~ json_data = json.dumps(data, indent=4) # ~ json_data = json.dumps(data, indent=4)
#~ print(json_data) # ~ print(json_data)
#~ #escribe el json en el archivo # ~ #escribe el json en el archivo
#~ fidProductsFile = open(userdir+"/findProducts.json", "w") # ~ fidProductsFile = open(userdir+"/findProducts.json", "w")
#~ fidProductsFile.write(json_data) # ~ fidProductsFile.write(json_data)
#~ fidProductsFile.close() # ~ fidProductsFile.close()
#------------------------------------------------- # -------------------------------------------------
products = json.loads(request.POST['product_objects']) products = json.loads(request.POST['product_objects'])
orderedProducts = OrderedDict() orderedProducts = OrderedDict()
...@@ -385,13 +396,14 @@ def purchaseProduct(request): ...@@ -385,13 +396,14 @@ def purchaseProduct(request):
## TODO: Implement a webservice in server for downloading those non-existing L1C products. ## ## TODO: Implement a webservice in server for downloading those non-existing L1C products. ##
## TODO: Add product L1C to Cart DB after product download. ## ## TODO: Add product L1C to Cart DB after product download. ##
#-------------------------------------------------------------------------------
# -------------------------------------------------------------------------------
# def L2ASCL_data(request): # def L2ASCL_data(request):
# with open("/home/ulises/REPSAT_NAS/mario_repsat_test/T15QZD_sclData.json") as f: # with open("/home/ulises/REPSAT_NAS/mario_repsat_test/T15QZD_sclData.json") as f:
# json_data = json.load(f) # json_data = json.load(f)
# print(json_data) # print(json_data)
# return render(request, 'L2ASCL_data.html', {"labels":",".join([k for k in json_data]), "vegetation":[v["4"] for k,v in json_data.items()] }) # return render(request, 'L2ASCL_data.html', {"labels":",".join([k for k in json_data]), "vegetation":[v["4"] for k,v in json_data.items()] })
#------------------------------------------------------------------------------- # -------------------------------------------------------------------------------
# def purchaseProduct(request): # def purchaseProduct(request):
# """ # """
# For now to purchase a product consists in downloading L1C products and saving them in DB. # For now to purchase a product consists in downloading L1C products and saving them in DB.
...@@ -452,12 +464,12 @@ def purchaseProduct(request): ...@@ -452,12 +464,12 @@ def purchaseProduct(request):
# return HttpResponse(status=204) # return HttpResponse(status=204)
#------------------------------------------------------------------------------- # -------------------------------------------------------------------------------
def showCart(request): def showCart(request):
user = User.objects.get(id=request.user.id) user = User.objects.get(id=request.user.id)
prod_list = [] prod_list = []
product_list = Purchase.objects.values('user', 'productList', 'purchased', 'price', 'aggreg_date','id','search__process_id__name').filter(user=user, purchased=0) product_list = Purchase.objects.values('user', 'productList', 'purchased', 'price', 'aggreg_date', 'id',
'search__process_id__name').filter(user=user, purchased=0)
total_price = 0 total_price = 0
total_products = 0 total_products = 0
...@@ -474,90 +486,166 @@ def showCart(request): ...@@ -474,90 +486,166 @@ def showCart(request):
total_price += products['price'] total_price += products['price']
total_products += 1 total_products += 1
return render(request, 'show_cart.html', {'product_list': prod_list, 'total_price': total_price, 'total_products': total_products}) return render(request, 'show_cart.html',
{'product_list': prod_list, 'total_price': total_price, 'total_products': total_products,'BASE_URL': BASE_URL})
#------------------------------------- # -------------------------------------
def Pay (request):
#---------------test process----------------------
def Pay(request):
# ---------------test process----------------------
print("PAGAR!!!!") print("PAGAR!!!!")
user = User.objects.get(id=request.user.id) user = User.objects.get(id=request.user.id)
query = [] query = []
query = Purchase.objects.values('id','search__area','user','user__username','user__email', 'search_id', 'search__clouds','search__startDate','search__endDate').filter(user=user, purchased=0) query = Purchase.objects.values('id', 'search__area', 'user', 'user__username', 'user__email', 'search_id',
'search__clouds', 'search__startDate', 'search__endDate').filter(user=user,
purchased=0)
for values in query: for values in query:
#print(values['user__username']) # print(values['user__username'])
#print(values['user__email']) # print(values['user__email'])
#print(values['search_id']) # print(values['search_id'])
#print(str(values['search__startDate'].date()).replace("-", "")) # print(str(values['search__startDate'].date()).replace("-", ""))
#print(str(values['search__endDate'].date()).replace("-", "")) # print(str(values['search__endDate'].date()).replace("-", ""))
#print(values['search__clouds']) # print(values['search__clouds'])
#print(values['search__area']) # print(values['search__area'])
print(values['id']) print(values['id'])
username = values['user__username'] username = values['user__username']
useremail = values['user__email'] useremail = values['user__email']
# userdir = NAS_PATH + "repsat_test_dev/"+useremail ##crea el directorio del usuario
#userdir = NAS_PATH + "repsat_test_dev/"+useremail ##crea el directorio del usuario
userdir = USERS_PATH + useremail userdir = USERS_PATH + useremail
if not os.path.exists(userdir): if not os.path.exists(userdir):
os.makedirs(userdir) os.makedirs(userdir)
search_dir = userdir+"/"+str(values['search_id']) search_dir = userdir + "/" + str(values['search_id'])
if not os.path.exists(search_dir): if not os.path.exists(search_dir):
os.makedirs(search_dir) os.makedirs(search_dir)
products_dir = NAS_PATH + "sentinelImages/L2A/" products_dir = NAS_PATH + "sentinelImages/L2A/"
linksDir = search_dir+"/L2A/" linksDir = search_dir + "/L2A/"
#obtiene los datos para el json # obtiene los datos para el json
data = {} data = {}
data['wkt'] = values['search__area'] data['wkt'] = values['search__area']
data['platform'] = 'Sentinel-2' data['platform'] = 'Sentinel-2'
data['productLevel'] = 'L2A' data['productLevel'] = 'L2A'
data['startDate'] = str(values['search__startDate'].date()).replace("-", "") #quita los guiones de la fecha data['startDate'] = str(values['search__startDate'].date()).replace("-", "") # quita los guiones de la fecha
data['endDate'] = str(values['search__endDate'].date()).replace("-", "") #quita los guiones de la fecha data['endDate'] = str(values['search__endDate'].date()).replace("-", "") # quita los guiones de la fecha
data['clouds'] = values['search__clouds'] data['clouds'] = values['search__clouds']
data['productsDir'] = products_dir data['productsDir'] = products_dir
data['linksDir'] = linksDir data['linksDir'] = linksDir
data['username'] = API_SENTINEL_USER data['username'] = API_SENTINEL_USER
data['password'] = API_SENTINEL_PASS data['password'] = API_SENTINEL_PASS
#json_data = json.dumps(data, indent=4,sort_keys=True) # json_data = json.dumps(data, indent=4,sort_keys=True)
#formatea el json # formatea el json
json_data = json.dumps(data, indent=4) json_data = json.dumps(data, indent=4)
#print(json_data) # print(json_data)
#escribe el json en el archivo # escribe el json en el archivo
fidProductsFile = open(search_dir+"/findProducts.json", "w") fidProductsFile = open(search_dir + "/findProducts.json", "w")
fidProductsFile.write(json_data) fidProductsFile.write(json_data)
fidProductsFile.close() fidProductsFile.close()
os.system("L2ASCL_AreaProcessing.sh "+search_dir+"/ 1 > "+search_dir+"/L2ASCL_AreaProcessing.log") ###ejecuta el proceso os.system(
"L2ASCL_AreaProcessing.sh " + search_dir + "/ 1 > " + search_dir + "/L2ASCL_AreaProcessing.log") ###ejecuta el proceso
#~ user = User.objects.get(id=request.user.id)
#~ prod_list = [] # ~ user = User.objects.get(id=request.user.id)
#~ product_list = Search.objects.values('user', 'area', 'startDate', 'endDate','clouds').filter(user=user) # ~ prod_list = []
# ~ product_list = Search.objects.values('user', 'area', 'startDate', 'endDate','clouds').filter(user=user)
#~ data = {}
# ~ data = {}
#~ for products in product_list:
#~ print(products) # ~ for products in product_list:
#~ product = json.loads(products['productList']) # ~ print(products)
#~ prod_list.append({ # ~ product = json.loads(products['productList'])
#~ 'purchased': products['purchased'], # ~ prod_list.append({
#~ 'price' : products['price'], # ~ 'purchased': products['purchased'],
#~ 'aggreg_date' : products['aggreg_date'], # ~ 'price' : products['price'],
#~ 'catalog': product # ~ 'aggreg_date' : products['aggreg_date'],
#~ }) # ~ 'catalog': product
#~ return JsonResponse({'product_list': prod_list}) # ~ })
# ~ return JsonResponse({'product_list': prod_list})
#-------------------------------------
# -------------------------------------
Purchase.objects.filter(user_id=request.user.id, purchased=0).update(purchased=True) Purchase.objects.filter(user_id=request.user.id, purchased=0).update(purchased=True)
return redirect('../../reports') return redirect('../../reports')
# -----------------------------------------------------------------
def IPN(request):
print("content-type: text/html\r\n\r\n")
if request.POST['payment_status'] == 'Completed':
Purchase.objects.filter(user_id=request.user.id, purchased=0).update(purchased=True)
return redirect('../../reports')
else:
return redirect('../cart')
#f.write(request.GET)
#f.close()
# PAYPAL_URL = "https://sandbox.paypal.com/cgi-bin/webscr"
#
# formData = "cmd=_notify-validate&" + parse.unquote(inputraw)
#
# f.write(formData);
# f.write("\n") # write into file 1st data package from paypal
#
# req = urllib.request.Request(PAYPAL_URL, formData.encode())
# req.add_header("Content-type", "application/x-www-form-urlencoded")
# response = urllib.request.urlopen(req)
# status = str(response.read())
#
# f.write(status) # write back into file what you received from paypal the 2nd time
# f.write("\n")
#
# if (not status == "b'VERIFIED'"):
# f.write("OH NO")
# # ERROR
# else:
# # HERE WE WILL TRIGGER STUFF WITH THE DATA FROM PAYPAL
# f.write("OH YES")
#
# f.write("\n")
# f.close()
#-----------------------------------------------------------------------
# def Pay3(request):
# VERIFY_URL_PROD = 'https://ipnpb.paypal.com/cgi-bin/webscr'
# VERIFY_URL_TEST = 'https://ipnpb.sandbox.paypal.com/cgi-bin/webscr'
#
# # Switch as appropriate
# VERIFY_URL = VERIFY_URL_TEST
#
# # CGI preamble
# print('content-type: text/plain')
# print()
#
# # Read and parse query string
# param_str = sys.stdin.readline().strip()
# params = urllib.parse.parse_qsl(param_str)
#
# # Add '_notify-validate' parameter
# params.append(('cmd', '_notify-validate'))
#
# # Post back to PayPal for validation
#
# headers = {'content-type': 'application/x-www-form-urlencoded',
# 'user-agent': 'Python-IPN-Verification-Script'}
# r = requests.post(VERIFY_URL, params=params, headers=headers, verify=True)
# r.raise_for_status()
#
# # Check return message and take action as needed
# if r.text == 'VERIFIED':
# pass
# elif r.text == 'INVALID':
# pass
# else:
# pass
# return redirect("https://google.com.mx")
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment