I have made a custom module budget with the field Value. I would like to sum all the values for the budgets I've made today
def value_budget_day(self):
for budget in self:
# Encontrar si hoy es el mismo dia que se creo un presupuesto
c_date = datetime.strftime(budget.create_date, "%Y-%m-%d %H:%M:%S")
t_date = datetime.strftime(budget.today, "%Y-%m-%d %H:%M:%S")
create_day = c_date[:10]
today_day = t_date[:10]
if create_day == today_day:
# Sumar todos los valores de los presupuestos de ese día
total = 0.0
for val in budget:
total += val.value
budget.today_value = total
else:
budget.today_value = 35
In my code the values are not sum
def value_budget_day(self):
total = 0
for budget in self:
# Encontrar si hoy es el mismo dia que se creo un presupuesto
c_date = datetime.strftime(budget.create_date, "%Y-%m-%d %H:%M:%S")
t_date = datetime.strftime(budget.today, "%Y-%m-%d %H:%M:%S")
create_day = c_date[:10]
today_day = t_date[:10]
if create_day == today_day:
# Sumar todos los valores de los presupuestos de ese día
total += budget.value
budget.today_value = total
else:
budget.today_value = 0
today_value = fields.Float(compute='value_budget_day')
Related
I have the following code to create a progress bar in a PowerPoint presentation
Sub BarreDeProgression()
'Génère une barre de progression
'Valeurs à adapter selon besoin
Const Longueur As Single = 1 'Longueur totale de la barre (% de la longueur de la diapo (0.25 =25%))
Const Hauteur As Single = 0.02 'Hauteur totale de la barre (% de la hauteur de la diapo)
Const PositionX As Single = 0.1 'Position en X de la barre (% de la longueur de la diapo en partant de la gauche)
Const PositionY As Single = 0.05 'Position en Y de la barre (% de la hauteur de la diapo en partant de la gauche)
'Récupération des infos
Set Pres = ActivePresentation
H = Pres.PageSetup.SlideHeight
W = Pres.PageSetup.SlideWidth * Longueur
nb = Pres.Slides.Count
Counter = 1
'Pour chaque Slide
For Each SLD In Pres.Slides
'Supprime l'ancienne barre de progression
nbShape = SLD.Shapes.Count
del = 0
For a = 1 To nbShape
If Left(SLD.Shapes.Item(a - del).Name, 2) = "PB" Then
SLD.Shapes.Item(a - del).Delete
del = del + 1
End If
Next
'pose la nouvelle barre de progression
For i = 0 To nb - 1
Set OBJ = SLD.Shapes.AddShape(msoShapeChevron, (W * i / nb) + W / nb * (PositionX / 2), H * (1 - PositionY), (W / nb) * (1 - PositionX), H * Hauteur)
OBJ.Name = "PB" & i
OBJ.Line.Visible = msoFalse
If i + 1 = Counter Then
OBJ.Fill.ForeColor.RGB = RGB(156, 156, 156)
Else
OBJ.Fill.ForeColor.RGB = RGB(216, 32, 39)
End If
Next
Counter = Counter + 1
Next
End Sub
The problem is that code loops through all slide and create a progress bar in all slide, but I don't want the bar in the first, in the introduction and i the conclusion. How can I fix it ? I thought to add and if condition where I specify that the slide number should be greater than 4, but it did not work. Thanks in advance.
In the long run, you should get in the habit of declaring variables. An example in this code is Dim X As Integer. When you do this, the variable acquires the properties and methods of the declared object type. If you don't declare them, they are all variants, and the application must guess which properties and methods apply.
In this version of your code, I removed the variant variable SLD, since that will apply the code to all members of the slides collection. I replaced it with a count of the number of slides. Then I was able to come up with a conditional statement that leaves out the first 2 and the last slides. I also adjusted the calculation of the nb variable to reduce it by three. This ensures the number of shapes totals the number of slides that display the shapes.
Here's the revised code:
Sub BarreDeProgression()
Dim X As Integer
'Génère une barre de progression
'Valeurs à adapter selon besoin
Const Longueur As Single = 1 'Longueur totale de la barre (% de la longueur de la diapo (0.25 =25%))
Const Hauteur As Single = 0.02 'Hauteur totale de la barre (% de la hauteur de la diapo)
Const PositionX As Single = 0.1 'Position en X de la barre (% de la longueur de la diapo en partant de la gauche)
Const PositionY As Single = 0.05 'Position en Y de la barre (% de la hauteur de la diapo en partant de la gauche)
'Récupération des infos
Set Pres = ActivePresentation
H = Pres.PageSetup.SlideHeight
W = Pres.PageSetup.SlideWidth * Longueur
nb = Pres.Slides.Count
Counter = 1
'Pour chaque Slide
For X = 1 To Pres.Slides.Count
If X > 2 And X < (Pres.Slides.Count) Then
'Supprime l'ancienne barre de progression
nbShape = Pres.Slides(X).Shapes.Count
del = 0
For a = 1 To nbShape
If Left(Pres.Slides(X).Shapes.Item(a - del).Name, 2) = "PB" Then
Pres.Slides(X).Shapes.Item(a - del).Delete
del = del + 1
End If
Next
'pose la nouvelle barre de progression
For I = 0 To nb - 1
Set OBJ = Pres.Slides(X).Shapes.AddShape(msoShapeChevron, (W * I / (nb - 3)) + W / (nb - 3) * (PositionX / 2), H * (1 - PositionY), (W / (nb - 3)) * (1 - PositionX), H * Hauteur)
OBJ.Name = "PB" & I
OBJ.Line.Visible = msoFalse
If I + 1 = Counter Then
OBJ.Fill.ForeColor.RGB = RGB(156, 156, 156)
Else
OBJ.Fill.ForeColor.RGB = RGB(216, 32, 39)
End If
Next
Counter = Counter + 1
End If
Next X
End Sub
So I want to do a while loop just to calculate the integral of some random functions. The thing is that when I pass opción = 1 it does the first if (good) but when I pass other number it breaks. Obviously, because True = 1 and False = 0. So how can I do it to do the while loop until (1,2,3) until I press 4... Thanks you so much in advance
while opcion == True:
if opcion == 1:
print('Vamos a calcular la siguiente integral:')
f = a*x + b
integral = sp.Integral(f, x)
sp.pprint(integral)
print()
print('Que tiene como resultado:')
sp.pprint(sp.integrate(f,x))
print()
print('Introducimos los límites y valores de las'
' constantes para caluclarla')
lim_inf = int(input('Límite inferior = '))
lim_sup = int(input('Límite superior = '))
while (lim_inf == lim_sup):
print('Los límites no pueden ser iguales !! '
'Vuelve a introducir valores diferentes')
lim_inf = int(input('Límite inferior = '))
lim_sup = int(input('Límite superior = '))
a = int(input('valor a = '))
b = int(input('valor de b = '))
res = integrate.quad(grad1, lim_inf, lim_sup, args=(a,b))
print()
print('Valor de la integral',res[0])
elif opcion == 2:
print('Vamos a calcular la siguiente integral:')
f = a*x**2 + b*x + c
integral = sp.Integral(f, x)
sp.pprint(integral)
print()
print('Que tiene como resultado:')
sp.pprint(sp.integrate(f,x))
print()
print('Introducimos los límites y valores de las'
' constantes para caluclarla')
lim_inf = int(input('Límite inferior = '))
lim_sup = int(input('Límite superior = '))
while (lim_inf == lim_sup):
print('Los límites no pueden ser iguales !! '
'Vuelve a introducir valores diferentes')
lim_inf = int(input('Límite inferior = '))
lim_sup = int(input('Límite superior = '))
a = int(input('valor a = '))
b = int(input('valor de b = '))
res = integrate.quad(grad2, lim_inf, lim_sup, args=(a,b))
print()
print('Valor de la integral',res[0])
elif opcion == 3:
print('Vamos a calcular la siguiente integral:')
f = a*x**3 + b*x**2 + c*x**2 + d
integral = sp.Integral(f, x)
sp.pprint(integral)
print()
print('Que tiene como resultado:')
sp.pprint(sp.integrate(f,x))
print()
print('Introducimos los límites y valores de las'
' constantes para caluclarla')
lim_inf = int(input('Límite inferior = '))
lim_sup = int(input('Límite superior = '))
while (lim_inf == lim_sup):
print('Los límites no pueden ser iguales !! '
'Vuelve a introducir valores diferentes')
lim_inf = int(input('Límite inferior = '))
lim_sup = int(input('Límite superior = '))
a = int(input('valor a = '))
b = int(input('valor de b = '))
res = integrate.quad(grad3, lim_inf, lim_sup, args=(a,b))
print()
print('Valor de la integral',res[0])
elif opcion == 4:
break
you should just wrap it into the while true then cause the break as expected and don't depent on option. Use sys to just pass in the opcion as an argument for the script so that 4 will just cause it to break automatically... otherwise if its just generated into the script... you can have opcion generate a 1 by default to begin work.
import sys
...
opcion = sys.argv[1]
while True:
if opcion == 1:
print('Vamos a calcular la siguiente integral:')
f = a*x + b
integral = sp.Integral(f, x)
sp.pprint(integral)
print()
print('Que tiene como resultado:')
sp.pprint(sp.integrate(f,x))
print()
print('Introducimos los límites y valores de las'
' constantes para caluclarla')
lim_inf = int(input('Límite inferior = '))
lim_sup = int(input('Límite superior = '))
while (lim_inf == lim_sup):
print('Los límites no pueden ser iguales !! '
'Vuelve a introducir valores diferentes')
lim_inf = int(input('Límite inferior = '))
lim_sup = int(input('Límite superior = '))
a = int(input('valor a = '))
b = int(input('valor de b = '))
res = integrate.quad(grad1, lim_inf, lim_sup, args=(a,b))
print()
print('Valor de la integral',res[0])
elif opcion == 2:
print('Vamos a calcular la siguiente integral:')
f = a*x**2 + b*x + c
integral = sp.Integral(f, x)
sp.pprint(integral)
print()
print('Que tiene como resultado:')
sp.pprint(sp.integrate(f,x))
print()
print('Introducimos los límites y valores de las'
' constantes para caluclarla')
lim_inf = int(input('Límite inferior = '))
lim_sup = int(input('Límite superior = '))
while (lim_inf == lim_sup):
print('Los límites no pueden ser iguales !! '
'Vuelve a introducir valores diferentes')
lim_inf = int(input('Límite inferior = '))
lim_sup = int(input('Límite superior = '))
a = int(input('valor a = '))
b = int(input('valor de b = '))
res = integrate.quad(grad2, lim_inf, lim_sup, args=(a,b))
print()
print('Valor de la integral',res[0])
elif opcion == 3:
print('Vamos a calcular la siguiente integral:')
f = a*x**3 + b*x**2 + c*x**2 + d
integral = sp.Integral(f, x)
sp.pprint(integral)
print()
print('Que tiene como resultado:')
sp.pprint(sp.integrate(f,x))
print()
print('Introducimos los límites y valores de las'
' constantes para caluclarla')
lim_inf = int(input('Límite inferior = '))
lim_sup = int(input('Límite superior = '))
while (lim_inf == lim_sup):
print('Los límites no pueden ser iguales !! '
'Vuelve a introducir valores diferentes')
lim_inf = int(input('Límite inferior = '))
lim_sup = int(input('Límite superior = '))
a = int(input('valor a = '))
b = int(input('valor de b = '))
res = integrate.quad(grad3, lim_inf, lim_sup, args=(a,b))
print()
print('Valor de la integral',res[0])
elif opcion == 4:
break
I am new to VBA, I am getting this Error 13 - types mismtached but I have no idea why and I found nothing helpful...
any hint ? (Sorry it's in french)
Function EIDPA(Coût_actif, Tx_dépréciation, Tx_marginal, Coût_opportunité)
EIDPA = ((Coût_actif * Tx_dépréciation * Tx_marginal) / (Coût_opportunité + Tx_dépréciation)) * ((1 + (0.5 * Coût_opportunité)) / (1 + Coût_opportunité))
End Function
Sub EIDPA2()
Coût_actif = InputBox("Entrez le coût de l'actif SVP", "Calculateur", "100000")
Tx_dépréciation = InputBox("Entrez le taux de dépréciation pour ammortissement SVP", "Calculateur", "0.30")
Tx_marginal = InputBox("Entrez le taux marginal d'imposition SVP", "Calculateur", "0.50")
Coût_opportunité = InputBox("Entrez le coût d'opportunité applicable SVP", "Calculateur", "0.05")
MsgBox "La valeur actuelle des économies d'impôts est de: " _
& Module1.EIDPA(Coût_actif, Tx_dépréciation, Tx_marginal, Coût_opportunité) & "$", vbInformation, "Calculateur"
End Sub
You should be properly Dimming your variables; otherwise you're attempting to use string variables as numerics:
Function EIDPA(Coût_actif As Double, Tx_dépréciation As Double, Tx_marginal As Double, Coût_opportunité As Double) As Double
EIDPA = ((Coût_actif * Tx_dépréciation * Tx_marginal) / (Coût_opportunité + Tx_dépréciation)) * ((1 + (0.5 * Coût_opportunité)) / (1 + Coût_opportunité))
End Function
Sub EIDPA2()
Dim Coût_actif As Double
Dim Tx_dépréciation As Double
Dim Tx_marginal As Double
Dim Coût_opportunité As Double
Coût_actif = CDbl(InputBox("Entrez le coût de l'actif SVP", "Calculateur", "100000"))
Tx_dépréciation = CDbl(InputBox("Entrez le taux de dépréciation pour ammortissement SVP", "Calculateur", "0.30"))
Tx_marginal = CDbl(InputBox("Entrez le taux marginal d'imposition SVP", "Calculateur", "0.50"))
Coût_opportunité = CDbl(InputBox("Entrez le coût d'opportunité applicable SVP", "Calculateur", "0.05"))
MsgBox "La valeur actuelle des économies d'impôts est de: " _
& Module1.EIDPA(Coût_actif, Tx_dépréciation, Tx_marginal, Coût_opportunité) & "$", vbInformation, "Calculateur"
End Sub
You're getting an error because InputBox returns strings, and you're trying to multiply strings together here:
EIDPA = ((Coût_actif * Tx_dépréciation * Tx_marginal) / (Coût_opportunité + Tx_dépréciation)) * ((1 + (0.5 * Coût_opportunité)) / (1 + Coût_opportunité)).
Try declaring your French variables as integers/floating point to see if that helps. More info
they are my rows
Número Total de Clientes
Número Total de Clientes de
Número Total de Líquidos que se Consumen en el Hogar a la Semana
Número Total de Líquidos que se Consumen en el Hogar a la Semana de
Número Total de garrafones de
Número Total de garrafones en el mercado
Númeto Total de garrafones de
Porcentaje Clientes que Compran por Calidad
Porcentaje Clientes que Compran por Disponibilidad
Porcentaje Clientesque Compran por Otros Motivos
Porcentaje Clientesque Compran por Precio
Porcentaje Total de garrafones de
Porcentaje de Clientes
Porcentaje de Clientes xxxx que Compran en la Ruta Hogar
Porcentaje de Clientes de
Porcentaje de Participación de Ventas de
Porcentaje de garrafones de
my table is named #ope_censo_indicador
you could see i have those
Número Total de Clientes
Número Total de Clientes de
i need it was
Número Total de Clientes marca
but i got
Número Total de Clientes
Número Total marcaClientes marca
with this query
update #ope_censo_indicador set ope_indicadoridname=(replace(ope_indicadoridname,'%de','%marca'))
where ope_indicadoridname like '% de'
with these too
Número Total de Líquidos que se Consumen en el Hogar a la Semana
Número Total de Líquidos que se Consumen en el Hogar a la Semana de
i need it return
Número Total de Líquidos que se Consumen en el Hogar a la Semana
Número Total de Líquidos que se Consumen en el Hogar a la Semana marca
this too
Porcentaje de Clientes Porcentaje de Clientes Cristal que Compran en
la Ruta Hogar Porcentaje de Clientes de
i need return
Porcentaje de Clientes Porcentaje de Clientes Cristal que Compran en
la Ruta Hogar Porcentaje de Clientes marca
( i have more but it would great i got it with one query)
after it, i'll have.
Número Total de Clientes
Número Total de Clientes marca
Número Total de Líquidos que se Consumen en el Hogar a la Semana
Número Total de Líquidos que se Consumen en el Hogar a la Semana marca
Número Total de garrafones marca
Número Total de garrafones en el mercado
Porcentaje Clientes que Compran por Calidad
Porcentaje Clientes que Compran por Disponibilidad
Porcentaje Clientesque Compran por Otros Motivos
Porcentaje Clientesque Compran por Precio
Porcentaje Total de garrafones marca
Porcentaje de Clientes
Porcentaje de Clientes xxxx que Compran en la Ruta Hogar
Porcentaje de Clientes marca
Porcentaje de Participación de Ventas marca
Porcentaje de garrafones marca
i am going to want to delete those (or to do a query with a distinct but i'll need return this:)
Número Total de Clientes marca
Número Total de Líquidos que se Consumen en el Hogar a la Semana marca
Número Total de garrafones marca
Número Total de garrafones en el mercado
Porcentaje Clientes que Compran por Calidad
Porcentaje Clientes que Compran por Disponibilidad
Porcentaje Clientesque Compran por Otros Motivos
Porcentaje Clientesque Compran por Precio
Porcentaje Total de garrafones marca
Porcentaje de Clientes xxxx que Compran en la Ruta Hogar
Porcentaje de Clientes marca
Porcentaje de Participación de Ventas marca
Porcentaje de garrafones marca
enter code here
This was tricky! I am assuming you are basically saying you want to replace the LAST "de" with "marca" but only if it is the LAST word. If it is in the middle you want to leave it alone.
If that is correct, this code handles it:
-- Setup a temp table with "bigstring" as your text and "lastpos" as the location of LAST "de"
DECLARE #tmp1 TABLE (bigstring varchar(1000), lastpos int)
INSERT INTO #tmp1 (bigstring) VALUES ('Número Total de Líquidos que se Consumen en el Hogar a la Semana')
INSERT INTO #tmp1 (bigstring) VALUES ('Número Total de Líquidos que se Consumen en el Hogar a la Semana de')
INSERT INTO #tmp1 (bigstring) VALUES ('Leave this de one alone')
-- Ensure we don't have any trailing spaces
UPDATE #tmp1 SET bigstring = RTRIM(bigstring)
-- If the string ENDS in ' de' then record the starting position of that word
UPDATE #tmp1 SET lastpos = LEN(bigstring)-2 WHERE RIGHT(bigstring,3) = ' de'
-- Here is how our table looks now
SELECT * from #tmp1
-- Now, if LASTPOS is not null, we want everything to the LEFT of that + 'marca'
UPDATE #tmp1 SET bigstring = SUBSTRING(bigstring, 1, lastpos) + 'marca' WHERE lastpos IS NOT NULL
-- Done!
SELECT * from #tmp1
Your first string was left alone, the second has the final "de" replaced with "marca" and the one I put in there (with "de" in the middle) was left alone.
I hope that helps!
I'm running a RAils 3.1,ruby 1.9.2 app and I've a issue with CSV;I must import data from csv file; this is my code:
def bulk_operations
require 'csv'
last_asset = ""
last_serial = ""
if request.path.include? "ingress_transport_document"
transport_document_id = params[:ingress_transport_document_id]
td = IngressTransportDocument.find(transport_document_id)
ingress = true;
elsif request.path.include? "egress_transport_document"
transport_document_id = params[:egress_transport_document_id]
td = EgressTransportDocument.find(transport_document_id)
end
if params[:dump_me]
begin
# #parsed_file=CSV::Reader.parse(params[:dump_me][:file],';',"\n")
CSV.foreach(params[:dump_me][:file]) do |row|
bw=BulkWarehouse.new
bw.serial = row[0]
bw.asset = row[1]
logger.debug "#{bw.serial},#{bw.asset} --> #{bw.serial.strip}"
#
# Cerco la presenza di warehouse se la bolla e di tipo aggiornamento
#
if !bw.serial.strip.empty? && !bw.asset.strip.empty? && update_warehouse
warehouse = Warehouse.find_by_serial_and_asset(bw.serial.strip,bw.asset.strip)
elsif !bw.serial.strip.empty? && update_warehouse
warehouse = Warehouse.find_by_serial(bw.serial.strip)
elsif !bw.asset.strip.empty? && update_warehouse
warehouse = Warehouse.find_by_asset(bw.asset.strip)
end
if warehouse && update_warehouse
bw.warehouse_id = warehouse.id
elsif update_warehouse
#wh_errors[:"bulk_warehouse#{n}"] = "Prodotto non presente"
end
if request.path.include? "ingress_transport_document"
bw.ingress_transport_document_id = transport_document_id
elsif request.path.include? "egress_transport_document"
bw.egress_transport_document_id = transport_document_id
end
if bw.save
n=n+1
GC.start if n%50==0
end
last_serial = row[0]
last_asset = row[1]
end
count = sa_query
flash[:notice]="Il CSV e stato importato con successo: #{n} nuovi record sono stati accodati per essere processati.<br>In totale hai #{count} record in attesa di essere processati."
#rescue CSV::IllegalFormatError
logger.debug("CSV Exception: IllegalFormatError")
count = sa_query
flash[:notice] = "Il CSV NON sembra essere formattato correttamente."
flash[:notice] += "L'ultimo ASSET inserito e stato #{last_asset}." if !last_asset.empty?
flash[:notice] += "L'ultimo SERIALE inserito e stato #{last_serial}." if !last_serial.empty?
flash[:notice] += "#{n} nuovi record sono stati accodati per essere processati."
flash[:notice] += "In totale hai #{count} record in attesa di essere processati."
end
end
# update_warehouse e true solo se la bolla e di tipo da aggiornamento
update_warehouse = td.transport_document_type.code == "AGE" ||
td.transport_document_type.code == "REP" ||
td.transport_document_type.code == "ASS"
if params[:ingress_transport_document_id] || params[:egress_transport_document_id]
self.index
render :index
else
redirect_to :action => "index"
end
and Rails give me the following errors: can't convert ActionDispatch::Http::UploadedFile into String
Any suggestion
In Ruby 1.9 it's just CSV.parse. See: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html#method-c-parse