Commit 1997dfe2 authored by Sergio Adrian Gongora Euan's avatar Sergio Adrian Gongora Euan

merged fixed

parents 3b1373f1 faccf8bf
...@@ -8,6 +8,7 @@ from catalog.models import Process ...@@ -8,6 +8,7 @@ from catalog.models import Process
#from django.contrib.auth.forms import UserCreationForm #from django.contrib.auth.forms import UserCreationForm
#from django.contrib.auth.models import User #from django.contrib.auth.models import User
#from buscador.models import Investigador, Reto #from buscador.models import Investigador, Reto
from .widgets import FengyuanChenDatePickerInput
all_process = Process.objects.filter(status=True) all_process = Process.objects.filter(status=True)
...@@ -21,7 +22,13 @@ for each_process in all_process: ...@@ -21,7 +22,13 @@ for each_process in all_process:
class ASFSearchForm(forms.Form): class ASFSearchForm(forms.Form):
polygon = forms.CharField(widget=forms.TextInput(attrs={'class':"form-control"})) polygon = forms.CharField(widget=forms.TextInput(attrs={'class':"form-control"}))
platform = forms.ChoiceField(choices=platforms, widget=forms.Select(attrs={'class':"form-control"})) platform = forms.ChoiceField(choices=platforms, widget=forms.Select(attrs={'class':"form-control"}))
start = forms.DateField(widget=forms.DateInput(attrs={'type':'date'}), required=True) start = forms.DateField(
end = forms.DateField(initial=datetime.date.today, widget=forms.DateInput(attrs={'type':'date'}), required=True) widget=FengyuanChenDatePickerInput(),
required=True
)
end = forms.DateField(
widget=FengyuanChenDatePickerInput(),
required=True
)
maxResults = forms.IntegerField() maxResults = forms.IntegerField()
...@@ -25,6 +25,9 @@ ...@@ -25,6 +25,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css"
integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous"> integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
<!-- Fengyuan Chen's Datepicker -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/datepicker/0.6.5/datepicker.min.css" integrity="sha256-b88RdwbRJEzRx95nCuuva+hO5ExvXXnpX+78h8DjyOE=" crossorigin="anonymous" />
{% block headMedia %}{% endblock %} {% block headMedia %}{% endblock %}
<link rel="stylesheet" href="{% static 'catalog/adminlte/bower_components/guides-master/dist/guides.css' %}"> <link rel="stylesheet" href="{% static 'catalog/adminlte/bower_components/guides-master/dist/guides.css' %}">
...@@ -212,9 +215,8 @@ ...@@ -212,9 +215,8 @@
<script src="{% static 'catalog/js/dataRetrieval.js' %}" type="text/javascript"></script> <script src="{% static 'catalog/js/dataRetrieval.js' %}" type="text/javascript"></script>
<!-- Chartsjs --> <!-- Chartsjs -->
<script src="{% static 'catalog/js/Chart.min.js' %}" type="text/javascript"></script> <script src="{% static 'catalog/js/Chart.min.js' %}" type="text/javascript"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <!-- Fengyuan Chen's Datepicker -->
<script src="{% static 'catalog/adminlte/bower_components/guides-master/dist/guides.min.js' %}" type="text/javascript"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/datepicker/0.6.5/datepicker.min.js" integrity="sha256-/7FLTdzP6CfC1VBAj/rsp3Rinuuu9leMRGd354hvk0k=" crossorigin="anonymous"></script>
{% block footer %}{% endblock %} {% block footer %}{% endblock %}
{% block scripts %}{% endblock %} {% block scripts %}{% endblock %}
<div id="ol"></div> <div id="ol"></div>
......
{% include "django/forms/widgets/input.html" %}
<script>
$(function () {
$("input[name='{{ widget.name }}']").datepicker({
format:'yyyy-mm-dd',
autoHide: true
});
});
</script>
\ No newline at end of file
This diff is collapsed.
...@@ -156,7 +156,8 @@ ...@@ -156,7 +156,8 @@
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ product.process }}: {{ product.aggreg_date }}</h3> <h3 class="box-title">{{ product.process }}: {{ product.aggreg_date }}</h3>
<div class="box-tools pull-right"> <div class="box-tools pull-right">
<span class="badge bg-green">Price ${{ product.price }}</span> <!-- <span class="badge bg-green">Price ${{ product.price }}</span> -->
<span class="badge bg-green">0.00</span>
<button type="button" class="btn btn-box-tool" data-widget="collapse"> <button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-plus"></i> <i class="fa fa-plus"></i>
</button> </button>
...@@ -207,7 +208,8 @@ ...@@ -207,7 +208,8 @@
</tr> </tr>
<tr> <tr>
<th>Total price:</th> <th>Total price:</th>
<td>${{ total_price }}</td> <!-- <td>${{ total_price }}</td> -->
<td>0.00</td>
</tr> </tr>
</tbody> </tbody>
<tfoot> <tfoot>
...@@ -223,7 +225,7 @@ ...@@ -223,7 +225,7 @@
</tfoot> </tfoot>
</table> </table>
<div class="text-center"> <div class="text-center">
<a href="../pay" class="btn btn-danger">PAY <a href="../pay" class="btn btn-danger">PROCESS
<!--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"
...@@ -233,7 +235,7 @@ ...@@ -233,7 +235,7 @@
height="1"--> height="1"-->
</a> </a>
<!--
<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">
...@@ -273,7 +275,7 @@ ...@@ -273,7 +275,7 @@
<input type="email" name="payer_email" value=""> <input type="email" name="payer_email" value="">
<input type="submit"> <input type="submit">
</form> </form>
-->
</div> </div>
</div> </div>
......
...@@ -10,7 +10,7 @@ from django.http import HttpResponse, JsonResponse, HttpResponseRedirect ...@@ -10,7 +10,7 @@ from django.http import HttpResponse, JsonResponse, HttpResponseRedirect
from django.urls import reverse 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, Permission
import requests, json, unicodedata, sys, base64 import requests, json, unicodedata, sys, base64
import os import os
from geosentinel import APISentinel, polygonToBox from geosentinel import APISentinel, polygonToBox
...@@ -57,10 +57,17 @@ def map(request): ...@@ -57,10 +57,17 @@ def map(request):
""" """
View function for home page of site. View function for home page of site.
""" """
if Permission.objects.filter(user=request.user.id):
advanced_search = True
else:
advanced_search = False
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,"advanced_search":advanced_search})
# ------------------------------------------------------------------------------- # -------------------------------------------------------------------------------
...@@ -109,14 +116,31 @@ def productList(request): ...@@ -109,14 +116,31 @@ def productList(request):
## getting the bounding box of the polygon ## getting the bounding box of the polygon
pol_bbox = polygonToBox.getWKTPolygonBoundingBox(area, True) pol_bbox = polygonToBox.getWKTPolygonBoundingBox(area, True)
##producttype:
type = " "
print(process)
if process == str(1):
type = "S2MSI1C"
if process == str(2):
type = "S2MSI2A"
## 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, products = sentinel.getProducts(pol_bbox, date,
{"platformname": "Sentinel-2", "cloudcoverpercentage": cloud_percentage}, {"platformname": "Sentinel-2", "producttype": type, "cloudcoverpercentage": cloud_percentage},"Contains") ##intenta obtener los productos que contienen el polígono
"Contains") ##intenta obtener los productos que contienen el polígono
if len(products) <= 0: if len(products) <= 0:
products = sentinel.getProducts(pol_bbox, date, {"platformname": "Sentinel-2", products = sentinel.getProducts(pol_bbox, date, {"platformname": "Sentinel-2", "producttype": type,"cloudcoverpercentage": cloud_percentage}) ## si no hay que contengan el polígono busca los que lo intersecan
"cloudcoverpercentage": cloud_percentage}) ## si no hay que contengan el polígono busca los que lo intersecan ##--
## requesting producto to sentinel api
##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
#~ 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'
...@@ -551,7 +575,7 @@ def Pay(request): ...@@ -551,7 +575,7 @@ def Pay(request):
fidProductsFile.write(json_data) fidProductsFile.write(json_data)
fidProductsFile.close() fidProductsFile.close()
os.system(SENTINEL_PATH + "/tools/L2ASCL_AreaProcessing.sh " + purchase_dir + "/ 1 > " + purchase_dir + "/L2ASCL_AreaProcessing.log") ###ejecuta el proceso os.system(SENTINEL_PATH + "/tools/L2ASCL_AreaProcessing.sh " + purchase_dir + "/ 0 > " + purchase_dir + "/L2ASCL_AreaProcessing.log") ###ejecuta el proceso
...@@ -603,11 +627,18 @@ def Registration(request): ...@@ -603,11 +627,18 @@ def Registration(request):
return HttpResponse("the username or password already exist") return HttpResponse("the username or password already exist")
else: else:
print("agregado") print("agregado")
User.objects.create_user(first_name=request.POST['name'],last_name=request.POST['last_name'],username=request.POST['username'], user = User.objects.create_user(first_name=request.POST['name'],last_name=request.POST['last_name'],username=request.POST['username'],
email=request.POST['email'], email=request.POST['email'],
password=request.POST['password'], is_active=False) password=request.POST['password'], is_active=False)
permissions = Permission.objects.filter(content_type__app_label='auth',
codename__in=[
'advanced_search'
])
user.user_permissions.add(*permissions.filter(content_type__model='user'))
message = "your registration is being processed" message = "your registration is being processed"
subject = "Registro RepSat" subject = "Registro RepSat"
wsMail2(request.POST['email'],request.POST['username'],message,subject) wsMail2(request.POST['email'],request.POST['username'],message,subject)
messages.success(request, 'your registration is being processed') messages.success(request, 'your registration is being processed')
return HttpResponseRedirect('login') return HttpResponseRedirect('login')
from django.forms import DateInput
class FengyuanChenDatePickerInput(DateInput):
template_name = 'fengyuanchen_datepicker.html'
\ No newline at end of file
.map {
height: 400px;
width: 100%;
}
.switch { .switch {
position: relative; position: relative;
display: inline-block; display: inline-block;
......
...@@ -217,3 +217,37 @@ select::-ms-expand { ...@@ -217,3 +217,37 @@ select::-ms-expand {
-o-transition: .25s all ease; -o-transition: .25s all ease;
transition: .25s all ease; transition: .25s all ease;
} }
.arrow_box {
position: relative;
background: #ffffff;
border: 1px solid #ffa74f;
min-height: 30px;
bottom: 10px;
}
.arrow_box:after, .arrow_box:before {
top: 100%;
left: 50%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
}
.arrow_box:after {
border-color: rgba(255, 255, 255, 0);
border-top-color: #ffffff;
border-width: 10px;
margin-left: -10px;
}
.arrow_box:before {
border-color: rgba(255, 167, 79, 0);
border-top-color: #ffa74f;
border-width: 11px;
margin-left: -11px;
}
...@@ -25,9 +25,8 @@ function refresh() { ...@@ -25,9 +25,8 @@ function refresh() {
dataType: "json", dataType: "json",
url: '../reports/ws/process_progress', url: '../reports/ws/process_progress',
success: function (data) { success: function (data) {
$.each(data, function (key, val) { $.each(data, function (key, val) {
//console.log(key+ " purchase_id:"+val.purchase_id+", progress: "+val.progress); //~ console.log(key+ " purchase_id:"+val.purchase_id+", progress: "+val.progress);
if (val.progress != 100) { if (val.progress != 100) {
$('#progress_bar' + val.purchase_id).attr("aria-valuenow", val.progress); $('#progress_bar' + val.purchase_id).attr("aria-valuenow", val.progress);
$('#progress_bar' + val.purchase_id).attr('style', 'width:' + val.progress + '%'); $('#progress_bar' + val.purchase_id).attr('style', 'width:' + val.progress + '%');
...@@ -37,6 +36,8 @@ function refresh() { ...@@ -37,6 +36,8 @@ function refresh() {
$('#action_buttons' + val.purchase_id).attr("class", "hidden"); $('#action_buttons' + val.purchase_id).attr("class", "hidden");
$('#main_progess' + val.purchase_id).removeClass("hidden"); $('#main_progess' + val.purchase_id).removeClass("hidden");
$('#main_progess' + val.purchase_id).attr("class", "progress"); $('#main_progess' + val.purchase_id).attr("class", "progress");
$('#textprogress'+ val.purchase_id).empty();
$('#textprogress'+ val.purchase_id).append(val.progress_text);
} }
else { else {
//$('#progress_bar' + val.purchase_id).attr("class", "progress-bar progress-bar-success progress-bar-striped"); //$('#progress_bar' + val.purchase_id).attr("class", "progress-bar progress-bar-success progress-bar-striped");
......
...@@ -145,11 +145,32 @@ function change(newType) { ...@@ -145,11 +145,32 @@ function change(newType) {
// Remove the old chart and all its event handles // Remove the old chart and all its event handles
if (myChart) { if (myChart) {
myChart.destroy(); myChart.destroy();
} }
// Chart.js modifies the object you pass in. Pass a copy of the object so we can use the original object later // Chart.js modifies the object you pass in. Pass a copy of the object so we can use the original object later
// -------------- set last values when the chart was destroyed ------
let selectedLayers = getSelectedLayersName().map( layerName => {
const layerCheckbox = $(':checkbox[value='+layerName+']');
return layerCheckbox.parent().attr('id')
});
selectedLayers = selectedLayers.filter(layerId => layerId!=null);
selectedLayers = selectedLayers.map(layerId => layerId.replace('sclcheck-', '').replace('-', ' '));
config.data.datasets.forEach(data => {
const label = data.label.toLowerCase().replace('-', ' ');
data.hidden = true;
if (selectedLayers.includes(label)) {
data.hidden = false;
}
})
// -------------------------------------------------------------------
var temp = jQuery.extend(true, {}, config); var temp = jQuery.extend(true, {}, config);
if (newType == "stackedBar"){ if (newType == "stackedBar"){
temp.type = "bar"; temp.type = "bar";
......
...@@ -219,8 +219,8 @@ ...@@ -219,8 +219,8 @@
class="progress-bar progress-bar-warning progress-bar-striped active" class="progress-bar progress-bar-warning progress-bar-striped active"
aria-valuemin="0" aria-valuemax="100" aria-valuemin="0" aria-valuemax="100"
style="width:{{ product.progress }}%"> style="width:{{ product.progress }}%">
<p style="color: #0a0a0a"> <p id="textprogress{{ product.purchase_id }}" style="color: #0a0a0a">
Downloading Downloading...
</p> </p>
</div> </div>
</div> </div>
......
...@@ -121,7 +121,8 @@ ...@@ -121,7 +121,8 @@
<!-- Main content --> <!-- Main content -->
<div id="timeLine" class="container floating-panel slidecontainer" style="position:absolute; display:block; bottom: 40px; left: 12%; width: 500px; z-index: 1000"> <div id="timeLine" class="container floating-panel slidecontainer" style="position:absolute; display:block; bottom: 40px; left: 12%; width: 500px; z-index: 1000">
<div class="range-control" id="rangecontrol"> <div class="range-control" id="rangecontrol">
<span id="tooltiptext">{{ labels|first|slice:"6:8" }}/{{ labels|first|slice:"4:6" }}/{{ labels|first|slice:"0:4" }}</span> <div id="rangecontrol2"></div>
<input class="cross-range" id="inputRange" type="range" min="0" max="{{ labels|length|add:'-1' }}" step="1" value="0" data-thumbwidth="20" style="background: transparent;"> <input class="cross-range" id="inputRange" type="range" min="0" max="{{ labels|length|add:'-1' }}" step="1" value="0" data-thumbwidth="20" style="background: transparent;">
...@@ -308,6 +309,13 @@ ...@@ -308,6 +309,13 @@
let fecha = $("option:eq(" + controlVal + ")").text(); let fecha = $("option:eq(" + controlVal + ")").text();
let valor = $("option:eq(" + controlVal + ")").val(); let valor = $("option:eq(" + controlVal + ")").val();
var slider3 = $("#inputRange")[0];
var sliderPos = slider3.value / slider3.max;
var pixelPostion = slider3.clientWidth * sliderPos;
//this is your pixel value
console.log(pixelPostion);
addImageLayer({ addImageLayer({
layerDate: valor layerDate: valor
}); });
...@@ -316,12 +324,18 @@ ...@@ -316,12 +324,18 @@
$("#maptitle").append("Map Date: " + fecha); $("#maptitle").append("Map Date: " + fecha);
$("#tooltiptext").empty(); $("#tooltiptext").empty();
$("#tooltiptext").append(fecha); $("#tooltiptext").append(fecha);
}); console.log(position);
$("#rangecontrol2").empty();
$("#rangecontrol2").append('<span class="arrow_box" id="tooltiptext">'+fecha+'</span>');
$('.arrow_box').css({'left':Math.round(pixelPostion-35) + 'px'})
});
/*
var slider2 = document.getElementById("inputRange"); var slider2 = document.getElementById("inputRange");
var sliderOffsetX = slider2.getBoundingClientRect().left - document.documentElement.getBoundingClientRect().left; var sliderOffsetX = slider2.getBoundingClientRect().left ;//- document.documentElement.getBoundingClientRect().left;
var sliderOffsetY = slider2.getBoundingClientRect().top - document.documentElement.getBoundingClientRect().top; var sliderOffsetY = slider2.getBoundingClientRect().top ;//- document.documentElement.getBoundingClientRect().top;
var sliderWidth = slider2.offsetWidth - 1; var sliderWidth = slider2.offsetWidth ;
slider2.addEventListener('mousemove', function (event) { slider2.addEventListener('mousemove', function (event) {
var currentMouseXPos = (event.clientX + window.pageXOffset) - sliderOffsetX; var currentMouseXPos = (event.clientX + window.pageXOffset) - sliderOffsetX;
...@@ -330,10 +344,10 @@ ...@@ -330,10 +344,10 @@
var fecha = $("option:eq(" + value + ")").text(); var fecha = $("option:eq(" + value + ")").text();
var valor = $("option:eq(" + value + ")").val(); var valor = $("option:eq(" + value + ")").val();
$("#tooltiptext").empty(); //$("#tooltiptext").empty();
$("#tooltiptext").css({"margin-left": currentMouseXPos + 'px', "margin-top": sliderOffsetY + 'px'}); //$("#tooltiptext").css({"margin-left": currentMouseXPos + 'px', "margin-top": sliderOffsetY + 'px'});
$("#tooltiptext").append(fecha); //$("#tooltiptext").append(fecha);
}); });*/
</script> </script>
<!-- page script --> <!-- page script -->
......
...@@ -210,6 +210,7 @@ def Reports(request): ...@@ -210,6 +210,7 @@ def Reports(request):
# ------------------------------------------------------------------------ # ------------------------------------------------------------------------
def wsProcessProgress(request): def wsProcessProgress(request):
print(request);
if request.is_ajax(): if request.is_ajax():
progress = 0 progress = 0
productList2 = [] productList2 = []
...@@ -223,19 +224,37 @@ def wsProcessProgress(request): ...@@ -223,19 +224,37 @@ def wsProcessProgress(request):
##################################################### #####################################################
# progress bar # # progress bar #
##################################################### #####################################################
progress_text = ""
if os.stat(log_info).st_size == 0: if os.stat(log_info).st_size == 0:
progress = 0 progress = 0
else: else:
if 'Linking Products...' in open(log_info).read(): if 'Starting Process...' in open(log_info).read():
progress = 10
progress_text = 'Processing...'
if 'Creating Shape file...' in open(log_info).read():
progress = 20 progress = 20
progress_text = 'Creating Shape file...'
if 'Linking Products...' in open(log_info).read():
progress = 30
progress_text = 'Linking Products...'
if 'Merging Images...' in open(log_info).read(): if 'Merging Images...' in open(log_info).read():
progress = 40 progress = 40
if 'Deleting Images...' in open(log_info).read(): progress_text = 'Merging Images...'
if 'Applying Mask...' in open(log_info).read():
progress = 50 progress = 50
progress_text = 'Applying Mask...'
if 'Extracting SCL information...' in open(log_info).read(): if 'Extracting SCL information...' in open(log_info).read():
progress = 60 progress = 60
progress_text = 'Extracting SCL information...'
if 'Spliting SCL image...' in open(log_info).read():
progress = 70
progress_text = 'Spliting SCL image...'
if 'Creating Tiles...' in open(log_info).read():
progress = 90
progress_text = 'Creating Tiles...'
if 'Finalizing...' in open(log_info).read(): if 'Finalizing...' in open(log_info).read():
progress = 100 progress = 100
progress_text = 'Finalizing...'
# item = Purchase.objects.get(pk=producto['id']) # item = Purchase.objects.get(pk=producto['id'])
# item.progress = progress # item.progress = progress
...@@ -244,6 +263,7 @@ def wsProcessProgress(request): ...@@ -244,6 +263,7 @@ def wsProcessProgress(request):
productList2.append({ productList2.append({
"purchase_id": producto['id'], "purchase_id": producto['id'],
"progress": progress, "progress": progress,
"progress_text":progress_text,
}) })
progress = 0 progress = 0
...@@ -258,6 +278,7 @@ def wsProcessProgress(request): ...@@ -258,6 +278,7 @@ def wsProcessProgress(request):
# }) # })
return HttpResponse(json.dumps(productList2)) return HttpResponse(json.dumps(productList2))
else: else:
print("Error Http404")
raise Http404 raise Http404
...@@ -526,7 +547,7 @@ def PDFGenerator(request,purchase_id): ...@@ -526,7 +547,7 @@ def PDFGenerator(request,purchase_id):
style3.fontSize = 19 style3.fontSize = 19
# Header # Header
im = Image(USERS_PATH + 'header.png', width=300, height=70) im = Image(USERS_PATH + 'header.png', width=500, height=70)
im.hAlign = 'CENTER' im.hAlign = 'CENTER'
story.append(im) story.append(im)
...@@ -575,16 +596,22 @@ def PDFGenerator(request,purchase_id): ...@@ -575,16 +596,22 @@ def PDFGenerator(request,purchase_id):
# Header # Header
im = Image(USERS_PATH + 'header.png', width=300, height=70) im = Image(USERS_PATH + 'header.png', width=500, height=70)
im.hAlign = 'CENTER' im.hAlign = 'CENTER'
story.append(im) story.append(im)
story.append(Spacer(1, .3 * inch))
fecha = file[6:8] + "/" + file[4:6] + "/" + file[0:4]
story.append(Paragraph("<strong>"+fecha+"</strong>", styleN, ))
story.append(Spacer(1, .5 * inch)) story.append(Spacer(1, .3 * inch))
# table with images # table with images
story.append(myTable(path1, SCL, file)) story.append(myTable(path1, SCL, file))
story.append(Spacer(1, .5 * inch)) story.append(Spacer(1, .2 * inch))
# add barchart and legend # add barchart and legend
...@@ -596,7 +623,7 @@ def PDFGenerator(request,purchase_id): ...@@ -596,7 +623,7 @@ def PDFGenerator(request,purchase_id):
story.append(PageBreak()) story.append(PageBreak())
# build our document with the list of flowables we put together # build our document with the list of flowables we put together
doc = SimpleDocTemplate(ruta + reporteDir + ".pdf", pagesize=letter, topMargin=5, title=searchInfo['report_name']+" "+searchInfo['title'],) doc = SimpleDocTemplate(ruta + reporteDir + ".pdf", pagesize=letter, topMargin=7, title=searchInfo['report_name']+" "+searchInfo['title'],)
doc.build(story) doc.build(story)
#return HttpResponse (request.POST.get('ruta')) #return HttpResponse (request.POST.get('ruta'))
......
...@@ -45,3 +45,4 @@ $(document).ready(function () { ...@@ -45,3 +45,4 @@ $(document).ready(function () {
order: [1, 'asc'] order: [1, 'asc']
}); });
}); });
{% load staticfiles %} {% load staticfiles %}
<style>
.switch {
position: relative;
display: inline-block;
width: 30px;
height: 17px;
}
.switch input {
opacity: 0;
width: 0;
height: 0;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
-webkit-transition: .4s;
transition: .4s;
}
.slider:before {
position: absolute;
content: "";
height: 13px;
width: 13px;
left: 4px;
bottom: 3px;
background-color: white;
-webkit-transition: .4s;
transition: .4s;
}
input:checked + .slider {
background-color: #f38e19;
}
input:focus + .slider {
box-shadow: 0 0 1px #f38e19;
}
input:checked + .slider:before {
-webkit-transform: translateX(13px);
-ms-transform: translateX(13px);
transform: translateX(13px);
}
/* Rounded sliders */
.slider.round {
border-radius: 14px;
}
.slider.round:before {
border-radius: 50%;
}
</style>
<div class="col-md-3"> <div class="col-md-3">
{% for data in user_data %} {% for data in user_data %}
...@@ -30,6 +92,23 @@ ...@@ -30,6 +92,23 @@
<i class="fa fa-pie-chart margin-r-5"></i> <b>Disk usage</b> <a <i class="fa fa-pie-chart margin-r-5"></i> <b>Disk usage</b> <a
class="pull-right">{{ data.size }}</a> class="pull-right">{{ data.size }}</a>
</li> </li>
<li class="list-group-item">
<div class="row ccontent ">
<div class="col-md-10 col-xs-10 col-lg-10 col-sm-10 col-xl-10">
<i class="fa fa-search-plus margin-r-5"></i>
<b>Advanced Search</b>
</div>
<div class="col-md-2 col-xs-2 col-lg-2 col-sm-2 col-xl-2 pull-right">
<label class="switch">
<input class="pull-right" id="{{ data.user_id }}" type="checkbox"
onclick="change_permission({{ data.user_id }})"
{% if data.advanced_search == True %} checked {% endif %}>
<span class="slider round pull-right" style="margin-right: 0px"></span>
</label>
</div>
</div>
</li>
</ul> </ul>
<!--a href="#" class="btn btn-primary btn-block"><b>Follow</b></a--> <!--a href="#" class="btn btn-primary btn-block"><b>Follow</b></a-->
...@@ -52,10 +131,10 @@ ...@@ -52,10 +131,10 @@
<div class="box-body"> <div class="box-body">
<ul class="list-group list-group-unbordered"> <ul class="list-group list-group-unbordered">
{% for data in user_searches %} {% for data in user_searches %}
<li class="list-group-item"> <li class="list-group-item">
<i class="fa fa-map-marker margin-r-5"></i> <b>{{ data.search_name }}</b> <a <i class="fa fa-map-marker margin-r-5"></i> <b>{{ data.search_name }}</b> <a
class="pull-right">{{ data.count }}</a> class="pull-right">{{ data.count }}</a>
</li> </li>
{% endfor %} {% endfor %}
</ul> </ul>
</div> </div>
...@@ -64,6 +143,29 @@ ...@@ -64,6 +143,29 @@
</div> </div>
<!-- /.box --> <!-- /.box -->
<div><br></div>
</div> </div>
<script>
function change_permission(user_id) {
var checkBox = document.getElementById(user_id);
if (checkBox.checked == true) {
permission(user_id, 'True');
} else {
permission(user_id, 'False');
}
}
function permission(user_id, status) {
$.ajax({
dataType: "json",
url: 'ws/change_permission',
data: {'user_id': user_id, 'status': status},
success: function (data) {
alert(data);
}
});
}
</script>
\ No newline at end of file
...@@ -27,5 +27,6 @@ urlpatterns = [ ...@@ -27,5 +27,6 @@ urlpatterns = [
url(r'^$', views.Users, name='users'), url(r'^$', views.Users, name='users'),
url(r'^(?P<user_id>(\d+))/$', views.User_id, name='user_id'), url(r'^(?P<user_id>(\d+))/$', views.User_id, name='user_id'),
url(r'^ws/report_table$', views.wsPurchasesPM, name='wsPurchasesPM'), url(r'^ws/report_table$', views.wsPurchasesPM, name='wsPurchasesPM'),
url(r'^ws/change_permission', views.wsChangePermission, name='wsChangePermission'),
] ]
# + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) # + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
import calendar import calendar
import os import os
from django.contrib.auth.models import User from django.contrib.auth.models import User, Permission
from django.db.models import Count from django.db.models import Count
from django.http import HttpResponse, Http404 from django.http import HttpResponse, Http404
from django.shortcuts import render from django.shortcuts import render
# Create your views here. # Create your views here.
import json import json
...@@ -35,6 +36,15 @@ def Users(request): ...@@ -35,6 +36,15 @@ def Users(request):
purchases = Purchase.objects.filter(user_id=user.id) purchases = Purchase.objects.filter(user_id=user.id)
in_process = Purchase.objects.filter(user_id=user.id).exclude(progress=100) in_process = Purchase.objects.filter(user_id=user.id).exclude(progress=100)
if Permission.objects.filter(user=user.id):
advanced_search = True
else:
advanced_search = False
print (advanced_search)
#bytes_size = 0 #bytes_size = 0
#for path, directories, files in os.walk(USERS_PATH + "repsat_test_dev/" + user.email): #for path, directories, files in os.walk(USERS_PATH + "repsat_test_dev/" + user.email):
# for filename in files: # for filename in files:
...@@ -50,11 +60,11 @@ def Users(request): ...@@ -50,11 +60,11 @@ def Users(request):
"searches": searches.count(), "searches": searches.count(),
"purchases": purchases.count(), "purchases": purchases.count(),
"in_process": in_process.count(), "in_process": in_process.count(),
#"size": size_repsat, "advanced_search" : advanced_search,
}) })
for search in Search.objects.values('search_name').filter(user_id=user.id).annotate( for search in Search.objects.values('search_name').filter(user_id=user.id).annotate(
count=Count('search_name')).order_by('-count')[:6]: count=Count('search_name')).order_by('-count')[:5]:
user_searches.append({ user_searches.append({
"search_name": search['search_name'], "search_name": search['search_name'],
"count": search['count'], "count": search['count'],
...@@ -173,7 +183,7 @@ def User_id(request, user_id): ...@@ -173,7 +183,7 @@ def User_id(request, user_id):
}) })
for search in Search.objects.values('search_name').filter(user_id=user.id).annotate( for search in Search.objects.values('search_name').filter(user_id=user.id).annotate(
count=Count('search_name')).order_by('-count')[:6]: count=Count('search_name')).order_by('-count')[:5]:
user_searches.append({ user_searches.append({
"search_name": search['search_name'], "search_name": search['search_name'],
"count": search['count'], "count": search['count'],
...@@ -338,3 +348,52 @@ def best_unit_size(bytes_size): ...@@ -338,3 +348,52 @@ def best_unit_size(bytes_size):
return str(round(bu_size, 2)) + " " + unit return str(round(bu_size, 2)) + " " + unit
# ------------------------------------------------ # ------------------------------------------------
@csrf_exempt
def wsChangePermission(request):
if request.is_ajax():
table_data = []
data = Purchase.objects.values('user_id', 'search__endDate', 'search__startDate', 'aggreg_date',
'search__process_id__name', 'name').filter(
user_id=request.POST.get('user_id'), purchased=True,
aggreg_date__month=to_if(request.POST.get('title'))).order_by('aggreg_date')
for producto in data:
table_data.append({
"search_name": producto['name'],
"process": producto['search__process_id__name'],
"purchase_date": str(producto['aggreg_date'])[:10],
"startDate": str(producto['search__startDate'])[:10],
"endDate": str(producto['search__endDate'])[:10],
})
return HttpResponse(json.dumps(table_data))
# return HttpResponse({'table_data':table_data})
else:
raise Http404
pass
#----------------------------------------------
@csrf_exempt
def wsChangePermission(request):
if request.is_ajax():
permissions = Permission.objects.filter(content_type__app_label='auth',
codename__in=[
'advanced_search'
])
user = User.objects.get(pk=request.GET.get("user_id"))
if request.GET.get("status") == 'True':
print ("verdadero")
user.user_permissions.add(*permissions.filter(content_type__model='user'))
else:
print ("falso")
user.user_permissions.remove(*permissions.filter(content_type__model='user'))
return HttpResponse("hola")
else:
raise Http404
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